中易网

DLL中的问题(The value of ESP was not properly saved across a function call. This is ...?)

答案:1  悬赏:70  
解决时间 2021-02-23 23:20
DLL的动态加载
DLL 使用时,如果要由用户程序来加载,使用的就是动态加载DLL:
我是刚学DLL这部分内容,写了个比较简单的DLL,并使用此DLL,以下是使用DLL中导出函数的
#include
...<文件包含>
HMODULE hModuleDLL;
void main(int argc,char *argv[])
{ BOOL bIsFree;
FARPROC lpDLLfun;
printf("加载DLL\n");
hModuleDLL=LoadLibrary("dllLibry.dll");
if(hModuleDLL!=NULL)
printf("Load DLL成功!\n");
else
{
printf("Load DLL 失败!\n");
exit(0);
}
lpDLLfun=GetProcAddress(hModuleDLL,"fun2");
if(lpDLLfun!=NULL)
{ printf("使用导出函数入口地址进DLL中的调用\n");
(*lpDLLfun)(0,0);
printf("DLL使用成功!\n");
}
else
{ printf("DLL使用失败!\n");
printf("lpDLLfun=%d\n",lpDLLfun);
}
bIsFree=FreeLibrary(hModuleDLL);
if(bIsFree)
printf("DLL释放成功!\n");
}
程序中fun2()是我的dllLibry.dll中的函数,此程序能通过编译和连接(使用的是VC++6.0),但在运行的时候,出了以下错误,望高手能够指点(最好详细点,谢谢!)
////////////////////////////////////////////////////////////////////
错误信息:
Debug Error!
Program:F:\Debug\DLoadDLL.exe
Module:
File:i386\chkesp.c
Line:42
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 convertion.
(Press Retry to debug the application)
//////////////////////////////////////////////////////////////
这先谢谢大家了~
--------------------------------------
我加了这两句(网上搜的):
typedef BOOL (_cdecl *FARPROC)(int x,int y); (1)
....
lpDLLfun=(FARPROC)GetProcAddress("****.dll","fun1");
后用lpDLLfun调用函数
(*lpDLLfun)=fun1(0,0);
编译连接后就不会跳出那错误信息了..
但小弟我还是不明白上面的第(1)句到底什么意思,望大牛们给我讲讲,谢谢!\n
最佳答案
注意calling convertion这两个词,推荐楼主看一篇老外写的《在 C++Builder 工程里使用 Visual C++ DLL》。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
用HMO法解环丁二烯的二价正离子时,用什么对
我还刚学吉他不久,也不懂乐理,只会按谱来弹歌
有什么女主比较强势的快穿文吗
御康源养生堂在什么地方啊,我要过去处理事情
水草塔村地址在什么地方,我要处理点事
802.11b/g/n无线网卡驱动下载在哪下载,我是
cad 3dmax好还是 CAD C4D
在ARCGIS10中文版属性表中怎么增加XY字段?
在古代,匈奴、鲜卑、吐蕃、突厥以及辽金……
银离子浓度多少会使人中毒
精灵之舞艺术学校我想知道这个在什么地方
各位大神请问我买的罗技G29方向盘怎么在gta5
类似于‘小公主’的这种电影有哪些?
迪豆多效修护养肤霜效果好不好?皮肤好干。用
谁知道马鞍山花园路在哪?
推荐资讯
怎么把电脑上的Excel2003PPT2003Word2003升级
如何更换充电器电路板里的电容
汽车底盘下通到排气管的管道漏水正常吗
C语言中如何让结果一直显示
[禾囊]读什么啊,标出拼音
哈尔滨医科大的医药营销怎么样?
书协会员翟渊民作品价格
体检前吃酵素有影响吗
金诚二手信息部地址有知道的么?有点事想过去
现在那些人没有想象力之会翻拍经典,明知超越
说说什么叫"徒长枝"?什么叫"结果枝"?
中国银行财富管理中心地址在什么地方,想过去
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?