使用嵌入式Mono(libmono-2.0)时,C#对象何时被垃圾收集
我使用libmono从我的C代码中调用C#对象。该对象的某些方法采用对象参数。例如,要使用数组参数调用对象,我使用使用嵌入式Mono(libmono-2.0)时,C#对象何时被垃圾收集,c#,c,mono,interop,C#,C,Mono,Interop,我使用libmono从我的C代码中调用C#对象。该对象的某些方法采用对象参数。例如,要使用数组参数调用对象,我使用 MonoArray *data = mono_array_new(domain, mono_get_byte_class(), len); 然后使用列出的对象和参数调用mono\u runtime\u invoke。我如何知道数组在mono\u array\u new和mono\u runtime\u invoke之间没有被垃圾收集?只要在调用invoke()的函数中保持数据指针
MonoArray *data = mono_array_new(domain, mono_get_byte_class(), len);
然后使用列出的对象和参数调用
mono\u runtime\u invoke
。我如何知道数组在mono\u array\u new
和mono\u runtime\u invoke
之间没有被垃圾收集?只要在调用invoke()的函数中保持数据指针作为局部变量,它就不会被垃圾收集。或者,由于它需要存储在mono_runtime_invoke()的参数数组中,请确保数组是局部变量(已分配堆栈或寄存器。函数参数等效于局部变量)
如果您需要将托管对象存储在任何其他位置,如静态变量、线程本地、malloced内存中的某个位置等,那么您需要自己保留对它的引用,例如使用mono_gchandle_new()API。发布C代码,以及要使用的方法的完整C签名。在点击submit之前,请确保调用约定是相同的。