Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Sending floats using objc_msgSendv



On Aug 10, 2005, at 9:32 PM, Greg Parker wrote:

On Aug 10, 2005, at 6:02 PM, Nathaniel Gray wrote:

Is there any way to send float or double arguments to a method designated at runtime? I've tried using objc_msgSendv, casting it in various ways, and using -performv::, but nothing works.

Using objc_msgSendv() properly requires knowledge of your platform's ABI. In particular, floating-point values must be stored in a special place in the marg_list on PowerPC. objc-msg-ppc.s notes some of the details.

I think those details are pretty well hidden by the marg_* macros though. I've used method_getArgumentInfo() to get the offset of the argument, and marg_setValue() to set it before calling objc_msgSendv (). It worked fine with all sorts of types, including floats and doubles.


* using NSInvocation. It shields you from the ABI details.

Very nice option. Definitely the best way to go, if it's flexible enough for your needs.


* using objc_msgSend() or objc_msgSend_stret() directly. Cast objc_msgSend() to a function pointer type that matches your method's signature, then make the call.

Typecasting only works for that if the signature is known at compile- time. If you won't know the signature until runtime, you'll need to either use the marg_* macros and pass the resulting marg_list struct to objc_msgSendv(). Or, use ffi or ffcall to call objc_msgSend().


That last option (ffi/ffcall) is the most complex, but it's the only way I've found to implement a "foreign" language (Perl in my case) subclass of an Objective-C class, and allow the "foreign" language to call super's methods.

The problem I found was that there's no "v" (at least none that's documented) equivalent to the objc_msgSendSuper() function. What I settled on doing was using ffcall to call the "normal" msgSendSuper functions, rather than the marg_* macros and the "v" functions.

sherm--

Cocoa programming in Perl: http://camelbones.sourceforge.net
Hire me! My resume: http://www.dot-app.org

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Objc-language mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/objc-language/email@hidden

This email sent to email@hidden
References: 
 >Sending floats using objc_msgSendv (From: Nathaniel Gray <email@hidden>)
 >Re: Sending floats using objc_msgSendv (From: Greg Parker <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.