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;
}


_______________________________________________

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

Reply via email to