[Mono-list] float p/invoke
andreas.faerber at web.de
Thu Nov 9 14:44:46 EST 2006
I'm facing a weird marshalling issue...
The Objective-C runtime on OS X exposes a method:
id objc_msgSend(id, SEL, ...); // with id and SEL pointers
I marshal it as IntPtr objc_msgSend(IntPtr, IntPtr, ...) using an SRE
p/invoke method factory.
This has worked fine so far, but now I noticed some marshalling
problems. The method's semantic return value is not always a pointer
but is apparently also used for int, unsigned int - which works fine
through IntPtr casting, but not for float. To my understanding float
is single-precision floating point number, thus 32 bits or 4 bytes
wide and identical to IntPtr.Size in a 32-bit environment. However,
when the method semantically returns a float, via IntPtr marshalling
I always get value 1 whereas return type float gives the correct
value but soon after leads to the app hanging, on both PPC and Intel.
Shouldn't the different managed types only lead to different
interpretations of the original 4 bytes? Am I missing something easy?
More information about the Mono-list