Re: Calling a Cocoa library from C
Re: Calling a Cocoa library from C
- Subject: Re: Calling a Cocoa library from C
- From: Charles Srstka <email@hidden>
- Date: Fri, 11 Nov 2011 20:34:38 -0600
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 (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