.net 在C++。网络4
我有一个从.net3.5迁移到.net4.0的WPF应用程序。这个应用程序使用了一个旧的C++库(我理解这是混合模式库,管理非托管的方法)。库移动到.net4环境,在回调调用时出现一些奇怪的错误:.net 在C++。网络4,.net,c++,.net-4.0,clr,debugging,.net,C++,.net 4.0,Clr,Debugging,我有一个从.net3.5迁移到.net4.0的WPF应用程序。这个应用程序使用了一个旧的C++库(我理解这是混合模式库,管理非托管的方法)。库移动到.net4环境,在回调调用时出现一些奇怪的错误: if (m_pCANCallback) m_pCANCallback(m_pCANCallbackPtr, &rxData); 如果附加了VS调试器,则会正确传递rxData 若我在并没有调试器的情况下启动应用程序,它将传递NULL 以下是回
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;
}
谢谢你的建议 根据我的经验,在调试器中工作,但调试器之外出现故障的情况下,100%的情况下,原因是函数本地数组溢出 更新:例如,这样做会导致该问题:
USBCANAdapter::CANDataCallback( void *pThis, RxData *pRxData )
{
char title[5];
strcpy(title, "1234567890");
// :
}
(或者overun可能在调用过程中…)是真的存在调试器还是缺少调试器,还是调试配置还是发布配置?在调试配置或发布配置中没有调试器时,问题会再次出现。因此,存在调试器与不存在调试器是正确的,请尽可能提高编译器上的警告级别。现在确保代码编译时没有警告。问题将消失。谢谢,问题已解决,原因是内存已损坏。现在我明白了这个建议的价值。杰姆斯,你能解释一下你的意思吗?哇,C++编程比我想象的还要硬。谢谢你的回答