在C ++ .net4上使用和不使用调试器的不同代码行为

时间:2010-08-19 10:50:33

标签: .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。

这是回调函数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;
}

非常感谢任何建议!

1 个答案:

答案 0 :(得分:1)

根据我的经验,100%的时间内某些东西在调试器中工作,并且在其外部失败,原因是超出了函数本地数组。

更新:例如,做这样的事情会导致这个问题:

 USBCANAdapter::CANDataCallback( void *pThis, RxData *pRxData ) 
 {
       char title[5];
       strcpy(title, "1234567890");
       // :
 }

(或者overun可能在调用rountine ....)