调用dll中的输出函数,在返回时出错?

herrycsdn 2003-04-18 11:27:40
调用dll中的输出函数,在返回时出错,
我跟踪发现就在返回后向下一句程序运行时出错,出错信息是这样的:
Debug Error
....
The value of ESP was not properly saved across a function call.....
等等
这是为什么?
...全文
47 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
5525369 2003-04-23
  • 打赏
  • 举报
回复
参数的压栈方式和定义的不一样
Tine 2003-04-23
  • 打赏
  • 举报
回复
楼上说得对
In355Hz 2003-04-22
  • 打赏
  • 举报
回复
调用方式不正确,本来申明为 __cdecl 的函数用 __stdcall 方式调用或者反之。这会造成函数返回后栈指针 esp 没有正确复位

就像 wangbab(bab) 说的一样,一般是函数指针的申明和函数在 dll 中的申明不一致导致的
plaapin1999 2003-04-20
  • 打赏
  • 举报
回复
我也出现过这个问题,也想知道最后答案。
peterretep 2003-04-20
  • 打赏
  • 举报
回复
清栈的时候有问题,估计是你的dll的调用规范和你当前进程的调用规范不一致,你再检查一下
wangbab 2003-04-20
  • 打赏
  • 举报
回复
typedef int (*PAccessJPEG) (INFOSTR*);\\
改为
typedef int (WINAPI *PAccessJPEG) (INFOSTR*);
试试看
o_racle 2003-04-20
  • 打赏
  • 举报
回复
应该是pacjpg(&m_Info);这一句的问题,单步调试一下,看看执行到里头是什么情况?
yangsiwei 2003-04-20
  • 打赏
  • 举报
回复
好象是调用的参数是地址还是指针的问题
herrycsdn 2003-04-20
  • 打赏
  • 举报
回复
算了,AccessJPEGModule()源码太长了,

楼上说的,能不能解释一下?“dll的调用规范和你当前进程的调用规范不一致”
o_racle 2003-04-19
  • 打赏
  • 举报
回复
说详细说清楚点,到底是什么地方出了什么错误?这么笼统的讲大家对你的问题都不清楚,怎么帮你呢?
Cline 2003-04-19
  • 打赏
  • 举报
回复
把你的AccessJPEGModule()源码?
herrycsdn 2003-04-19
  • 打赏
  • 举报
回复
就是动态调用dll时的问题,我跟踪发现在dll的输出函数里没问题,就是返回后出错了,
我不知道怎么说得更详细,
我是这样调用的
HMODULE hMod = LoadLibrary("JpegModule.dll");
typedef int (*PAccessJPEG) (INFOSTR*);
PAccessJPEG pacjpg = (PAccessJPEG)GetProcAddress(hMod,"AccessJPEGModule");
m_Info.comm = CMD_IS_VALID_FILE;//判断指定文件是否能被本模块处理
m_Info.state = PKST_NOTVER;
m_Info.annexdata.iAnnData = 0;
pacjpg(&m_Info);

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧