Thomas Wiest wrote: > Hey, > I'm using the Mono embedding API and I'm using HandleRef's instead > of IntPtr's (as per the instructions on the interop page). > > > http://www.mono-project.com/Interop_with_Native_Libraries > > > However, the HandleRef's seem to only be marshaled to IntPtr's if you're > using p/invoke's. I've attached a tar ball with two examples of what I'm > trying to do. Both examples can be compiled and run using "make run". > The Dll_Import example works flawlessly, marshaling the HandleRef into > an IntPtr. The mono_embed fails miserably because the HandleRef is still > a MonoObject (notice the memory address' don't line up as they do in the > Dll_Import example). > > From Robert Jordan's earlier e-mail it seems that the HandleRef is > intentionally not marshaled. So my question is, how do I get the > advantages of HandleRef's when using the embedding API? And if I just > switch back to IntPtr's, will my C# objects get collected before my > native code is done executing?
You don't need HandleRefs when using icalls and the embedded API. Just declare the icalls as non-static and they will automatically get the MonoObject* pointer of the managed object: C# class Person { [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern void print_person(); } C: void print_person(MonoObject* this) { } Robert _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list