处理通过调用native-to-managed thunk获得的异常

时间:2012-11-05 14:39:11

标签: mono

这个场景很简单,我在我的应用程序中嵌入了单声道运行时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句柄??

1 个答案:

答案 0 :(得分:1)

引用您链接的页面: 请注意,LOCAL变量不需要此注册,因为它们存储在堆栈中。它只需要全局变量,因为它们不是GC根集的一部分。

这意味着在你的场景中你不必分配句柄。