__stdcal __cdecl
需要调用别人的一个A DLL和自己的一个B DLL
这时候需要将编译器设置为__stdcal 才能编译成功..否则出现error LNK2001: unresolved external symbol "int __cdecl SD_CloseDevice(void * *)" (?SD_CloseDevice@@YAHPAPAX@Z) 一堆这个错误...
如果这样设置后编译通过但是调用我的B DLL编译不会错,运行的时候就返回个The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
我将我的DLL改成__Stdcal 也一样有这个会报这个错误...., 这是咋回事......
B DLL 是win 32 DLL
[解决办法]
dumpbin A.dll
[解决办法]
如果A.DLL有头文件,只需要引用头文件,调用就可以了,编译器会自己处理。
如果是动态载入,声明函数时,你需要声明为与A.LL的调用约定(stdcal)相同
The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
===========
调用不同,堆栈不平衡,出现错误
[解决办法]
出错信息绝对是 __stdcall和__cdecl不匹配的问题。。
神奇的地球