различное поведение кода с отладчиком и без него на C ++ .net4 - PullRequest
0 голосов
/ 19 августа 2010

У меня есть приложение WPF, которое было перенесено из .net3.5 в .net4.0.Это приложение использует старую библиотеку C ++ (насколько я понимаю, это библиотека смешанного режима, что означает управляемый-неуправляемый).Библиотека переместилась в среду .net4 с некоторой странной ошибкой, возникающей при обратном вызове:

            if (m_pCANCallback)
            m_pCANCallback(m_pCANCallbackPtr, &rxData); 

Она правильно передает rxData, если подключен отладчик VS, и 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;
}

Большое спасибо за любые советы!

1 Ответ

1 голос
/ 19 августа 2010

По моему опыту, в 100% случаев, когда что-то работает в отладчике и выходит из строя за его пределами, причиной является превышение локального массива функции.

ОБНОВЛЕНИЕ: Например, выполнение чего-то подобного вызовет эту проблему:

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

(или переполнение может быть в вызывающем рутине ....)

...