您的位置:首页 > 产品设计 > UI/UE

DLL 调用错误 -The value of ESP was not properly saved across a function cal

2013-10-30 20:12 447 查看
调用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.

(Press Retry to Debug the Application)

我的解决方法是:在函数调用前加入 WINAPI

I was having the same problem, but I just FIXED it. I was getting the same error from the following code:

HMODULE hPowerFunctions = LoadLibrary("Powrprof.dll");

typedef bool (*tSetSuspendStateSig)(BOOL, BOOL, BOOL);

tSetSuspendState SetSuspendState = (tSuspendStateSig)GetProcAddress(hPowerfunctions, "SetSuspendState");

result = SetSuspendState(false, false, false); <---- This line was where the error popped up.

After some investigation, I changed one of the lines to:

typedef bool (WINAPI*tSetSuspendStateSig)(BOOL, BOOL, BOOL);

which solved the problem. If you take a look in the header file where SetSuspendState is found (powrprof.h, part of the SDK), you will see the function prototype is defined as:

BOOLEAN WINAPI SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN);

So you guys are having a similar problem. When you are calling a given function from a .dll, its signature is probably off. (In my case it was the missing WINAPI keyword).

Hope that helps any future people! :-)

Cheers. 

 

 Dheeraj | reply 2003-08-21 23:25

引用自:转载请标明出处:http://blog.csdn.net/HappySong/archive/2005/04/07/339707.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dll winapi
相关文章推荐