2012-07-19 46 views
1

我正在使用libmono從我的C代碼調用C#對象。該對象的一些方法使用Object參數。因此,舉例來說,調用與陣列參數的對象,我使用什麼時候使用嵌入式單聲道(libmono-2.0)收集C#對象垃圾回收

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

,然後調用mono_runtime_invoke與列出的對象和參數。我如何知道該陣列在mono_array_newmono_runtime_invoke之間沒有垃圾收集?

+0

發佈C代碼以及您要使用的方法的完整C#簽名。請確保在您提交之前調用約定是一樣的。 – 2012-07-19 15:37:24

回答

3

只要您將數據指針保存爲調用invoke()的函數中的局部變量,它就不會被垃圾收集。或者,因爲需要將它存儲在mono_runtime_invoke()的參數數組中,請確保該數組是一個局部變量(堆棧或寄存器已分配,函數參數相當於一個局部變量)。

如果您需要將託管對象存儲在任何其他位置,例如靜態變量,本地線程,malloced內存等處的某處,則需要自己保存對它的引用,例如使用mono_gchandle_new( )API。