我有一个使用VS2010构建的DLL(C代码)并定义了一组函数。我还有一个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。
有关如何进一步调试此内容的任何建议或我可能错过的任何提示?
答案 0 :(得分:0)
尝试在调试器本身下正常运行程序,并在变量mpSim_ResetODScan
周围放置数据断点 - 以查看它何时可能发生变化。似乎是缓冲区溢出的问题。