这个场景很简单,我在我的应用程序中嵌入了单声道运行时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句柄??
答案 0 :(得分:1)
引用您链接的页面: 请注意,LOCAL变量不需要此注册,因为它们存储在堆栈中。它只需要全局变量,因为它们不是GC根集的一部分。
这意味着在你的场景中你不必分配句柄。