У меня есть dll (код C), который построен с использованием VS2010 и определяет набор функций. У меня также есть exe (код C ++), построенный с использованием VS2010, который динамически загружает DLL и вызывает функции. Первая пара вызовов функций работает нормально, затем примерно в 20% случаев вызов третьей функции вызывает нарушение прав доступа по нулевому адресу. Остальные 80% времени звонка в порядке. Это всегда один и тот же вызов функции, который вызывает проблему.
typedef void (__cdecl *mtSim_ResetODScan)(void);
mtSim_ResetODScan mpSim_ResetODScan;
if ((mpSim_ResetODScan = (mtSim_ResetODScan)GetProcAddress(mhSimDLL,
"_Sim_ResetODScan")) == NULL) return 0;
В этот момент mpSim_ResetODScan = 0x5E9741D0. Позже функция вызывается, и когда я отлаживаю исполняемый файл, она прерывает выполнение при вызове функции:
mpSim_ResetODScan();
Попытка войти в функцию приводит к нарушению доступа. Отладчик VS сообщает, что mpSim_ResetODScan по-прежнему имеет значение 0x5E9741D0.
Комментирование всего кода внутри функции в dll не имеет значения.
В DLL:
extern "C" __declspec(dllexport) void __cdecl _Sim_ResetODScan(void);
Dependency Walker показывает, что dll и exe используют MSVCR100.DLL версии 10.0.30319.460.
Любые предложения о том, как я могу отладить это дальше или какие-либо подсказки о вещах, которые я мог пропустить?