Note that of course you can take this one step further and use a typedef to mask that you're passing back an untyped pointer:
typedef OCObjcCodeRef void * OCObjcCodeRef OCCreateObjcCode(void) { return (ObjcCodeRef)[[ObjcCode alloc] init] } int OCGetFloatData(OCObjcCodeRef objcCodeRef, float *result1, float *result2) { ObjcCode *obj = (ObjcCode *)objcCodeRef; @autoreleasepool { *result1 = [obj doSomeStuff]; *result2 = [obj doSomethingElse]; return [obj doMagic]; } } void OCReleaseObjcCode(OCObjcCodeRef o) { [(ObjcCode *)o release]; } Which gets you roughly to the "toll free bridging" abstraction. Tom Davie if (*ra4 != 0xffc78948) { return false; } On 12 Nov 2011, at 22:48, Greg Guerin wrote: > Nathan Sims wrote: > >> Hmm, if not a global, where would the declaration go? The C function >> certainly shouldn't return it, so if it is to remain persistent across >> calls, wouldn't the logical (the only?) place for it be as a global in the >> library's .m file? > > > Why shouldn't the C function return it? As far as C is concerned, an object > pointer is just an opaque pointer. Handle it like any other opaque pointer. > > Example: > > void * setup_data() > { > return (void *) [[ObjcCode alloc]init]; > } > int get_float_data( void * ptrFrom_setup_data, float *result1, float *result2) > { > ObjcCode *obj = (ObjcCode *) ptrFrom_setup_data; > > NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; > > [obj call]; > *result1 = [more stuff]; > etc.; > > [pool drain]; > return 0; > } > void quit_data( void * ptrFrom_setup_data ) > { > [(ObjcCode *)ptrFrom_setup_data release]; > } > > -- GG > > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/cocoa-dev/tom.davie%40gmail.com > > This email sent to tom.da...@gmail.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com