Hi Martin & Brian,

On Mar 17, 2009, at 9:25 PM, Brian Chapados wrote:

I think that if you need to make use extensive use of C
functions/libraries, then the least painful route is to wrap this
functionality in Objective-C classes.  Writing Objective-C classes
that call your C code is easier than writing C ruby extensions.  At
least in my opinion, this is why MacRuby makes it easier to interface
with C. Just create a dylib or framework, load it in MacRuby and use
it.

Note that there is currently no way to bridge arbitrary C functions
anyway, so if you want something that isn't covered by BridgeSupport,
your only option right now is to wrap it in Objective-C.

It is possible to cover using BridgeSupport any arbitrary API, though. See the gen_bridge_metadata(1) man page, or BridgeSupport(5) if you want to write it by hand.

MacRuby trunk uses libffi under the covers to call C / ObjC implementations and uses the BridgeSupport annotations to provide the correct signatures. We could expose an API (like the Ruby "FFI" gem) that can feed the runtime with signatures, that should be very trivial.

There really isn't a way to get a pointer to a MacRuby function and
pass that to a C function.  So callback-type situations would have to
be wrapped in Objective-C.

FYI, in RubyCocoa it is possible to pass Proc objects as function pointers. We allocate an FFI closure that calls the proc and pass a pointer to the closure to the underlying C API.

This has not been ported to MacRuby, yet :-)

Laurent
_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to