Hey, Roger Davenport wrote: > Can anyone explain the best way to pass delegates into C (for later > callbacks) and later invoke them? > > Currently, I it looks like I should create an extern static function (in > C#) which is hooked into the mono class using mono_add_internal_call (in > C). I am guessing (from looking at the mono p/invoke functions) that it > will be just a regular function pointer?
(1) If you don't want to use Mono's p/invoke infrastructure from managed code, you'd need an intermediary C wrapper from which you invoke the managed delegate using mono_get_delegate_invoke () and mono_runtime_invoke () This is pretty slow. (2) If you're courageous you could use the non public mono_delegate_to_ftnptr () declared in mono/metadata/marshal.h. Since this function is not part of the public API, your app could cease working in the future. Besides of this, it's pretty comfortable. (3) The NET 2.0 introduced System.Runtime.InteropServices.GetFunctionPointerForDelegate That's a managed wrapper for mono_delegate_to_ftnptr (). You can call the method from C using mono_runtime_invoke (). In all case you have to pin the managed delegate using mono_gchandle_new () and mono_gchandle_free (). > How will this work with compound delegates? Do you mean multicast delegates? Yes. Robert _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list