[Mono-dev] Embedding Mono and HandleRef...
robertj at gmx.net
Sat Dec 30 20:57:05 EST 2006
Thomas Wiest wrote:
> 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).
> 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:
public extern void print_person();
void print_person(MonoObject* this)
More information about the Mono-devel-list