Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在使用 libmono 从我的 C 代码中调用 C# 对象。该对象的某些方法采用对象参数。因此,例如,要调用带有数组参数的对象,我使用
MonoArray *data = mono_array_new(domain, mono_get_byte_class(), len);
然后mono_runtime_invoke使用列出的对象和参数调用。我怎么知道数组不是在mono_array_new和之间收集的垃圾mono_runtime_invoke?
mono_runtime_invoke
mono_array_new
只要将数据指针作为局部变量保存在调用 invoke() 的函数中,它就不会被垃圾回收。或者,由于它需要存储在 mono_runtime_invoke() 的参数数组中,请确保该数组是局部变量(分配堆栈或寄存器。函数参数相当于局部变量)。
如果您需要将托管对象存储在任何其他位置,例如静态变量、本地线程、分配内存中的某个位置等,那么您需要自己保留对它的引用,例如使用 mono_gchandle_new() API。