我有从.net3.5迁移到.net4.0的WPF应用程序。这个应用程序使用一个旧的C ++库(据我所知这是混合模式库,意味着托管非托管)。库移动到.net4环境,在回调调用上发生了一些奇怪的错误:
if (m_pCANCallback)
m_pCANCallback(m_pCANCallbackPtr, &rxData);
如果连接了VS调试器,它会正确传递rxData 如果我在没有调试器的情况下启动应用程序,它会传递NULL。
这是回调函数defenition:
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;
}
非常感谢任何建议!
答案 0 :(得分:1)
根据我的经验,100%的时间内某些东西在调试器中工作,并且在其外部失败,原因是超出了函数本地数组。
更新:例如,做这样的事情会导致这个问题:
USBCANAdapter::CANDataCallback( void *pThis, RxData *pRxData )
{
char title[5];
strcpy(title, "1234567890");
// :
}
(或者overun可能在调用rountine ....)