Re: Calling a Cocoa library from C
Re: Calling a Cocoa library from C
- Subject: Re: Calling a Cocoa library from C
- From: Wim Lewis <email@hidden>
- Date: Fri, 11 Nov 2011 18:22:44 -0800
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 (email@hidden)
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:
This email sent to email@hidden