On Oct 18, 2013, at 6:15 PM, Uli Kusterer <witness.of.teacht...@gmx.net> wrote: > On Oct 18, 2013, at 4:48 AM, Shane Stanley <sstan...@myriad-com.com.au> wrote: >> is there any way to build a call to a C function on the fly? I mean >> something like pass a string to a method, and have it call the function of >> that name? > > > Short: No. Long: Maybe. > > 1) You can put a function in a dynamic library and export it, and load that > library. If you know its signature, you can then call it. > > 2) You can build a look-up table of name -> function pointer mappings inside > your application, then look up the function pointer by name and call it. > You'd need to know its signature then, too. > > 3) You can build a dynamic library that has this function as its main entry > point and call that. Essentially a variant of #1. You'll still need to know > its signature beforehand then > > 4) You can use a library like libffi to call a function pointer (using the > methods in #1 through #3 to get one from a name) even without knowing its > calling conventions beforehand. As long as you know the signature the moment > you're calling it and have the proper values, that'll work (this is what > you'd do if you wanted to make e.g. CoreFoundation APIs accessible to a > scripting language) > > Cheers, > -- Uli Kusterer > "The Witnesses of TeachText are everywhere..." > http://www.zathras.de
Oh, one more thing: Instead of dlsym(), you can also use CFBundleGetFunctionPointerForName() and its cohorts might also be useful for this if you want to go a bit more high-level. But even then, it needs to be an exported symbol in a dylib, can't be just any internal function. Cheers, -- Uli Kusterer "The Witnesses of TeachText are everywhere..." http://www.zathras.de _______________________________________________ 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