C ++-> C ++ / CLI如何将本机成员函数作为回调传递给托管代码

时间:2018-10-25 08:56:09

标签: c++

我在C ++中有一个本机回调函数,让我们这样说:

void ::CallbackFunction(void)
{
  // Do nothing
}

现在我还有另一个本机功能:

void ::SomeNativeFunction(void)
{
  m_callback = std::tr1::bind(&::CallbackFunction, m_Tcy); // save in m_callback (std::tr1::function<void()>)
  m_Tcy->SomeManagedFunction(&m_callback);
}

好的,现在我调用了一个托管函数,并为该函数提供了本机c ++函数。 然后,我有另一个项目,一个C ++ / CLI项目,该项目导出一个本机类以提供来自.NET世界的本机应用程序功能。 让我们看一下托管代码:

typedef std::tr1::function<void()>* callback_function;

callback_function m_nativCallback;

void ::SomeManagedFunction(callback_function callback)
{
  m_nativCallback = callback;
  // Does some stuff that triggers SomeManagedCallback
}

void ::SomeManagedCallback(IAsyncResult^ ar)
{
  (*m_nativCallback)();
}

现在,如果我对此进行调试,则一切正常,但是在离开回调函数(在托管类内部)之后,Visual Studio(VS2010)不再响应并崩溃。有时我设法关闭了该应用程序,VS还原了自身并向我显示了这些错误:

First-chance exception at 0x00007ffb2b59dd60 in *.exe: 0xC0000005: Access violation at location 0x00007ffb2b59dd60.
Unhandled exception at 0x00007ffb2b59dd60 in *.exe: 0xC000041D: Exception during a user callback.

调试起来非常困难,因此我遇到了严重的问题,以找出引发这些异常的原因。有人可以帮我吗?

非常感谢!

0 个答案:

没有答案