Hi Alex Not sure if this will help at all as I am not 100% sure what you are doing. In my case, using Mono, I needed to track events being raised in the Mono C runtime back into Obj-C space. You need some method of defining a call back function in the target C Api - without that thinks would look rather bleak.
Basically the C Mono runtime is configured to a call static C function in an Obj C .m file in response to a C# managed event firing. The static then calls a static method on an Obj-C class. This Obj-C static uses collections to track registered events and invokes performSelector: on a registered Obj-C target. See here: https://github.com/ThesaurusSoftware/Dubrovnik/blob/master/Framework/XCode/Representations/DBManagedEvent.m One of the arguments based in as part of the event callback is a pointer that is used as a a key to retrieve the target NSObject. This is complicated by the fact that the incoming pointer represents a moveable memory location so there is some extra indirection too. https://github.com/ThesaurusSoftware/Dubrovnik/blob/master/Framework/XCode/Representations/DBPrimaryInstanceCache.m This can get a bit complex but its all doable. Jonathan > On 4 Mar 2016, at 21:14, Alex Zavatone <z...@mac.com> wrote: > > Great! It certainly does… but here's where my brain breaks. > > The call is originating from the C lib and within the C function. I am not > calling the C function from Objective-C. > > I'm looking at somehow passing this as a string (UTF-8, yep) back to an OC > class instance, so this implies either a callback or some reference to the OC > instance that that cares about the response and a means to get that message > to it. > > If this is as simple as setting up a callback or a pointer reference, from > the c class to the OC instance? Is it sane programming for the C class to > have more than one callback to different OC object instances? > > I was thinking one for data and one for method calls for organizational > purposes. > > Or should there be one layer that serves as a clearly defined API to create a > walled garden between the OC world and the C interface to the compiled C lib? > > > I'm working with PJSIP and PJ's docs clearly state, "we are going to crater > unless you do everything SIP related on the main thread." The code that I am > rewriting replacing has nasty try/catch clauses and forces many operations to > the main thread just in case they call PJSIP operations - which clearly makes > for a sucky user experience and really clunky application architecture. > > I'm looking to avoid that nastiness by starting from ground zero so that we > can wrap a solidly conceived architecture around a neatly walled off > interface layer to PJSIP. > > > Would it make sense to send a notification from the C method to an > Objective-C object to get the value from the C class? Then I'd need to worry > about storing it, that seems clunky and too involved just to return a string. > > Thank you, sir. Loads for me to learn here. > > Alex Zavatone > > > > On Mar 4, 2016, at 3:48 PM, Doug Hill wrote: > >> Alex, >> >> I’ve worked on a few wrapper libraries, so I have some experience with this. >> >> In your Obj-C wrapper, you would need to create the NSString yourself. So, >> if you have a C function: >> >> char* MyCFunc(void); >> >> The Objective-C wrapper method would do something like: >> >> - (void) myObjcMethod >> { >> char* cStr = MyCFunc(); >> NSString* objcStr = [[NSString alloc] initWithUTF8String:cStr]; >> >> return objCStr; >> } >> >> Depending on the C function implementation, you might have to deal with >> releasing the C string in your wrapper. Also, I assume UTF-8 encoding, which >> may or may not be true. >> >> Hopefully this helps you. >> >> Doug Hill >> >> >>> On Mar 4, 2016, at 12:07 PM, Alex Zavatone <z...@mac.com> wrote: >>> >>> I'm in the middle of some fun where there is a wrapper class to a lib >>> that's written in C and the c function has a char string that I'd like to >>> return back to or somehow pass on to an Cbjective-C class. >>> >>> I'm sure there is an established practice for performing this type of task, >>> but while I have the opportunity to do this, I'd like to start be learning >>> the right way to handle this operation. >>> >>> I've seen really poor use of a catch all delegate for this approach, but am >>> pretty unsure on viable and safe methods to handle this. >>> >>> Any tips to how to handle this? >>> >>> Thanks in advance, >>> >>> Alex Zavatone >> >> > > > _______________________________________________ > > 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: > https://lists.apple.com/mailman/options/cocoa-dev/lists%40mugginsoft.com > > This email sent to li...@mugginsoft.com _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com