#733: Proc as callback function for CoreAudio(AudioDeviceCreateIOProcID) isn't called -----------------------------------+---------------------------------------- Reporter: nagachika00@… | Owner: lsansonetti@… Type: defect | Status: new Priority: blocker | Milestone: Component: MacRuby | Keywords: -----------------------------------+---------------------------------------- Comment(by martinlagardette@…): Replying to [comment:2 nagachika00@…]:
Did you mean that MacRuby cannot make callback Proc Object for function pointer returned from last argument of AudioDeviceCreateIOProcID()? [...] So I think CoreAudio can call Ruby Proc object via stub callback function passed to second argument. Is this my misconception?
I'm not sure I understand exactly what you're asking, so let me know if I'm not correctly answering: In its current implementation, when calling Obj-C / C methods, MacRuby converts ruby values (Fixnum, Strings, etc.) to C values (long, char *, etc.). When the needed C value is a function pointer, it will check if the argument is a Proc. If it is, it creates a "trampoline" function that will be passed to the C function, and the trampoline function simply "calls" (executes) the Proc. However, the contrary is not implemented. Aka, if a function returns a function pointer, or take a pointer to a function pointer, MacRuby does not know, yet, how to take this function pointer and make it a Ruby value (ideally a Proc). That is the current problem. When you pass the Pointer to the `AudioDeviceCreateIOProcID`, the pointer is filled with a function pointer. However, once the function returns, MacRuby has to translate this pointer to function pointer to some ruby value that can be used. And for now, we don't know how to do that :-).
If I want to distribute my MacRuby Application, can I include modified version of BridgeSupport file with it, and let MacRuby use it instead of system's one?
You can load custom bridge support files, I guess you could do that before loading the framework (if I remember correctly, similar bridgesupport files are not loaded twice). I'll need to make sure though, but I think it's possible. -- Ticket URL: <http://www.macruby.org/trac/ticket/733#comment:3> MacRuby <http://macruby.org/>