У меня есть встроенная функция обратного вызова в C ++, скажем, что-то вроде этого:
void ::CallbackFunction(void)
{
// Do nothing
}
Теперь у меня есть другая встроенная функция:
void ::SomeNativeFunction(void)
{
m_callback = std::tr1::bind(&::CallbackFunction, m_Tcy); // save in m_callback | m_Tcy is the class where CallbackFunction exists
m_Tcy->SomeManagedFunction(m_callback);
}
Хорошо, теперь я вызвалуправлял функцией и дал этой функции нативную функцию c ++.Давайте рассмотрим управляемый код:
// This won't work
// typedef std::tr1::function<void __stdcall ()>* callback_function;
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)();
}
Теперь, если я отлаживаю это, я получаю сообщение об ошибке An unhandled exception of type System.AccessViolationException occurred in .dll Additional information: An attempt was made to read or write in the protected memory. This is an indication that other memory is corrupted.
.
Может ли быть, что что-то не так с соглашением о вызовах?
Спасибо