On Nov 11, 2011, at 8:22 PM, Wim Lewis wrote: > On Nov 11, 2011, at 5:49 PM, Nathan Sims wrote: >> Newb question. I need to create an OS X Cocoa library that is going to be >> called from a C program. The C program's interface will be simple, along the >> lines of: >> >> retval=get_float_data(&float1,&float2); >> >> where get_float_data() is a function that resides in the Cocoa library and >> invokes Objc code to generate and return two float values to the caller. >> >> I'm unclear on how to architect this. Can a C function invoke Objc methods? >> (OSX 10.6.8, Xcode 3.2.6) > > Yes. There's no real barrier between the two (even less of a barrier than > there is between C and C++). Everything works as you'd expect. > > Unless your calling program is being invoked from other ObjC code (like an > application's event loop), you may want to put an autorelease pool and an > exception-catching block in the called C function. The autorelease pool will > make sure that temporary objects created in the ObjC code get deallocated > when get_float_data() returns, and although exceptions can propagate through > C functions you probably want to convert them into an error code or exit(1) > or something. > > int get_float_data(float *result1, float *result2) > { > NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; > @try { > [objcCode call]; > *result1 = [more stuff]; > etc.; > } @catch { > fprintf(stderr, "omg doomed!\n"); > etc.; > } @finally { > [pool drain]; > } > > return blahblah; > }
In this day and age, you should probably just use @autoreleasepool instead of NSAutoreleasePool: int get_float_data(float *result1, float *result2) { @autoreleasepool { [objcCode call]; *result1 = [more stuff]; etc.; } return blahblah; } Charles_______________________________________________ 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