VC6.0 The value of ESP was not properly saved across a function call 错误解决方法

调用DLL函数,出现错误

Run-Time Check Failure #0 - 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函数是一个远函数,而且是一个C函数,你得告诉编译器它是个c函数才行。那么你就可以在定义该函数的时候加上一句话,

FAR PASCAL 或者 __stdcall 这个就OK了。

具体做法:

比如说你要定义一个 返回类型为空,参数为空的函数指针:

typedef void (*LPFUN)(void);

这样确实跟我们dll里的函数匹配了,上面也说了,我们应该添上几个字,告诉编译器这个是一个远的C函数。

typedef void (WINAPI *LPFUN)(void);

typedef void (__stdcall *LPFUN)(void);

typedef void    (FAR PASCAL *LPFUN)    (void);

像上面这样定义就OK了,如果用的是VC++,那么直接用第一种定义就ok了。

注意,上面是使用 MFC (DLL)的做法。

如果是WIN32 DLL,得相应的去掉WINAPI ,__stdcall ,FAR PASCAL 这几个参数。因为WIN32 DLL 默认的入栈方式为 __cedcall方式,不是__stdcall方式。

具体的组合方式太多了,反正知道错误的原因是声明相应的函数未匹配就行了。

引用自

http://bbs.csdn.net/topics/300134656

时间: 2024-10-07 07:27:19

VC6.0 The value of ESP was not properly saved across a function call 错误解决方法的相关文章

解决安装VC6.0后出现MSDEV.EXE错误解决方法

问题:安装VC6.0后,在打开项目或添加文件时,出现如下错误: 可能导致原因:由于Ms安装软件的兼容性问题,导致VC6.0安装不完全, 解决方法:--网上打sp6补丁的方法貌似不可用,所以可以采用另一种方法 1.在下面的网站下载FileTool.exe http://support.microsoft.com/kb/241396/en-us      2.FileTool.exe是个自解压文件,执行它,解压到某个目录下 3.解压后的文件是一个VC工程,在VC6中编译它 4. 在dsw文件上右键“

项目部署到tomcat6.0启动成功后访问页面报500错误解决方法

如题:项目部署到tomcat6.0启动成功后访问页面报500错误解决方法,很奇葩,启动的时候没有任何问题,但输入访问地址后报500,去年国庆放假前夕,为这个问题伤神了半天最后解决了,今天又碰到了,乍一看摸不着头,后面仔细回想了下,迅速解决了问题. 原因:项目里面的jar和tomcat里面lib里面的jar重复了. 解决方法: 1.要么更换tomcat7或之后的版本,之后的版本就不会出现这个问题. 2.去部署之后的tomcat的webapps\项目名\WEB-INF\lib 里面删掉jsp-api

error at ::0 can't find referenced pointcut pointCutName 错误解决方法

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: public final void org.mybatis.spring.support.SqlSessionDaoSupport.setSqlSessionTemplate(org.mybatis.spring.SqlSessionTemplate); nested exception is java.la

安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above. (错误解决方法)

安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above.  (错误解决方法) 主要是由于版本不对,sdk和adt的版本. 解决思路: 打开Eclipse--帮助(help) -- Install Now Software -- Add按钮 Name:随便输入 下面的文本框输入 :http://dl-ssl.google.com/android/eclipse/ 在线更新就行了,超慢呀! =====

Target runtime Apache Tomcat v6.0 is not defined.错误解决方法

Eclipse导入工程后工程上显示一个小红叉,但工程里没有文件错误,也没有语法错误,百思不得其解啊,后来在网上找了一些资料说是项目引用的类库路径有问题.[项目]->[右键]->[build path]->[configure build path]->[libraries],查看一下引用的类库路径.网上都说是因为这里引用错误引起的,但是我在项目导入的时候做的第一件事情就是修改这里的library,因此不是这个原因. 在problems中显示错误是:Target runtime Ap

EF6.0下建立ADO.NET实体数据模型错误解决方法

最近在学习EF+MVC的过程中遇到个很奇怪的问题:EF5.0下建立ADO.NET实体数据模型可以成功,可在EF6.0下建立ADO.NET实体数据模型就报错了,下图为错误详情: 在自己的电脑里压根就找不到这个这个路径,对于EF的引用也不是在这个目录下,不懂怎么就会出现这个路径. 在网上搜了很久都没找到中文的相关资料,英文的倒是找到一篇,连接:http://forums.asp.net/t/1949811.aspx?Error+building+an+entity+model+tt+is+empty

xcode升级到6.0以后遇到的警告错误解决方法

Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换掉这个方法即可. 2,警告:Declaration of "struct sockaddr" will not be visible outside of this function解决办法:在你的开源.m文件中添加 #import

Hue - Oozie Editor: Retrying connect to server: localhost/127.0.0.1:8050 的错误解决方法

本文原文出处: 严禁任何形式的转载,否则将委托CSDN官方维护权益! 问题描述 在当前版本的HUE(2.6.1-2)里,oozie editor存在一个糟糕的BUG: 用户无法在workflow的配置中指定${jobTracker}和${nameNode}的值,尽管我尝试了所有可以尝试的地方,但是当通过hue去submit(不是通过oozie的命令行)一个workflow时,${jobTracker}和${nameNode}的值都被无情的重置了!如果这两个属性的值刚好是正确的,那么自然相安无事,

Error, some other host already uses address 192.168.0.202错误解决方法

今天配置虚拟机网卡的时候遇到错误:Error, some other host already uses address 192.168.0.202 查了很多方法,比如:编辑 /etc/sysconfig/network-scripts/ifup-eth 后来发现局域网里面有其他机器使用了192.168.0.202 这个IP,最后把虚拟机IP改为一个局域网内没人使用的IP就OK了