该场景非常简单,我2.10.8
在我的应用程序中嵌入了单声道运行时,并且我通过以下方式获得的指针调用托管方法mono_method_get_unmanaged_thunk
:
// obtain pointer
bool (__stdcall*foo) (MonoException**);
foo = mono_method_get_unmanaged_thunk(somemethod);
// call it
MonoException* exc;
foo(&exc);
if(exc)
// handle exception
// nothing else...
让我感到困惑的是,我没有对MonoException
指针做任何其他事情(我读过的文档没有说明这一点)。是否由托管运行时处理删除?如果是这样,如何确定我的本地端没有持有指向它的指针?
编辑
我通读了源代码,发现异常只是指向用创建的对象的指针mono_object_new
,因此它们是垃圾收集的主题。
现在,我还读到如果我想在本机端保留一些指针并防止它被垃圾,我需要为它获取 GC 句柄。所以现在的(修改后的)问题是:
如果返回的指向异常对象的指针的点仅用作错误报告工具,并且在托管调用之后立即进行此类错误报告,那么可以安全地假设它在我处理它之前不会被垃圾(不使用 gc 句柄)?