Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用嵌入式Mono(libmono-2.0)时,C#对象何时被垃圾收集_C#_C_Mono_Interop - Fatal编程技术网

使用嵌入式Mono(libmono-2.0)时,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()的函数中保持数据指针

我使用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()的函数中保持数据指针作为局部变量,它就不会被垃圾收集。或者,由于它需要存储在mono_runtime_invoke()的参数数组中,请确保数组是局部变量(已分配堆栈或寄存器。函数参数等效于局部变量)


如果您需要将托管对象存储在任何其他位置,如静态变量、线程本地、malloced内存中的某个位置等,那么您需要自己保留对它的引用,例如使用mono_gchandle_new()API。

发布C代码,以及要使用的方法的完整C签名。在点击submit之前,请确保调用约定是相同的。