1

我正在使用 libmono 从我的 C 代码中调用 C# 对象。该对象的某些方法采用对象参数。因此,例如,要调用带有数组参数的对象,我使用

MonoArray *data = mono_array_new(domain, mono_get_byte_class(), len);

然后mono_runtime_invoke使用列出的对象和参数调用。我怎么知道数组不是在mono_array_new和之间收集的垃圾mono_runtime_invoke

4

1 回答 1

3

只要将数据指针作为局部变量保存在调用 invoke() 的函数中,它就不会被垃圾回收。或者,由于它需要存储在 mono_runtime_invoke() 的参数数组中,请确保该数组是局部变量(分配堆栈或寄存器。函数参数相当于局部变量)。

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

于 2012-07-20T10:16:40.317 回答