托管代码抛出的本机异常跳过本机处理程序c ++ / cli

时间:2015-01-11 20:31:58

标签: exception c++-cli

我有一些本机C ++代码(native)通过之前设置的函数指针(managed)调用托管C ++函数(managed_ptr)(在同一程序中)在该计划中。与此类似:

原生功能:

void(*managed_ptr)();
void native()
{
  try
  {
    managed_ptr();
  }
  catch (my_exception e)
  {
    // Handle exception
  }
}

管理功能:

void managed()
{
  // Code
  if(x)
    throw my_exception();
}

异常类型(本机):

class my_exception final : public exception
{
public:
  my_exception() : exception("Error!") {}
}

但是当managed抛出本机异常my_exception时,它会跳过本机异常try / catch并使用SEHException崩溃程序。为什么这样做以及如何使用本机处理程序进行本机异常?

提前致谢,

MagikM18

修改

我尝试创建一个名为throwNative的本机函数,以便在本机代码中抛出错误,并使用异常对象从托管代码调用该错误,但这也不起作用。

throwNative:

template<typename _Ex> void throwNative(_Ex e)
{
  throw e;
}

托管代码:

// ...
throwNative(my_exception());
// ...

0 个答案:

没有答案