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

Reply via email to