【发布时间】:2010-08-19 10:50:33
【问题描述】:
我有从 .net3.5 迁移到 .net4.0 的 WPF 应用程序。此应用程序使用一个旧的 C++ 库(据我了解,这是混合模式库,表示托管-非托管)。库移至 .net4 环境,并在回调调用时出现一些奇怪的错误:
if (m_pCANCallback)
m_pCANCallback(m_pCANCallbackPtr, &rxData);
如果附加了 VS 调试器,它会正确传递 rxData 如果我在没有调试器的情况下启动应用程序,它会传递 NULL。
这里是回调函数定义:
void USBCANAdapter::CANDataCallback( void *pThis, RxData *pRxData )
因此,在此函数的主体中,pRxData 等于 NULL,但它仅在没有调试器且仅在 .net4 环境中发生。
以防万一,回调初始化:
m_pUsbCan->DefineCANMsgCallback( (TUsbCallback)USBCANAdapter::CANDataCallback );
void CUsbFt::DefineCANMsgCallback(TUsbCallback pCallback, void *pCallbackPtr)
{
m_pCANCallback = pCallback;
m_pCANCallbackPtr = pCallbackPtr;
}
非常感谢您的任何建议!
【问题讨论】:
-
真的是 Debugger present 与 Debugger 不存在 还是 Debug config 与 Release config ?
-
在 Debug config 或 Release config 没有 Debugger 的情况下问题重现。因此,存在调试器与不存在调试器是正确的
-
将编译器的警告级别设置得尽可能高。现在确保代码编译时没有警告。问题会消失的。
-
谢谢,问题已解决,原因是内存损坏。现在我明白了这个建议的价值。
标签: .net c++ .net-4.0 clr debugging