请教高手:一个奇怪而有趣的问题,高分相送!

tvfan1234 2003-08-22 11:36:19
调用动态库里的函数,向其传递指针参数,程序运行异常出错。
相关代码如下:
程序:char buffer[7][16];
int Write=Writedata(buffer[0],bufferlenth);
动态库:
int WINAPI Writedata(char *buffer,int listsize);

我已将Writedata()函数体置空,返回0;试过静态,动态连接;单部调试buffer的地址 ,内容都正常存在和正常。
但程序运行至int Write=Writedata(buffer,bufferlenth);(buffer里的数据没有越界),任然报错:
Debug Error!
The value of ESP was not properly saved across a function call. This is usually a result of calling a function declard with one calling convention with a function pointer declared with a different calling convention.
显然是在传递参数时出错。
我实在找不出原因所在,还请哪位高手指点。
...全文
58 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤必有邻 2003-08-22
  • 打赏
  • 举报
回复

__stdcall
改为
__cdecl
tvfan1234 2003-08-22
  • 打赏
  • 举报
回复
动态库中函数原型已经有了__STDCALL:
int __stdcall Writedata(char *buffer,int listsize)
tvfan1234 2003-08-22
  • 打赏
  • 举报
回复
to FAICHEN(CC) :
能说得更清楚点吗?我现在静态连接,include了.h;
Cline 2003-08-22
  • 打赏
  • 举报
回复
use __stdcall or __cdecl to explicitly declare your function type.
bluestar 2003-08-22
  • 打赏
  • 举报
回复
int Write=Writedata(buffer[0],bufferlenth);没错
int Write=Writedata(buffer,bufferlenth);错了,参数类型不对,改成
int Write=Writedata((char *)&buffer,bufferlenth);
FAICHEN 2003-08-22
  • 打赏
  • 举报
回复
如:dll中倒出要加_stdcall的话
使用连接部分声明要添加_stdcall
否则为_cdecl
FAICHEN 2003-08-22
  • 打赏
  • 举报
回复
你的动态连接库的调用约定不一致
oo 2003-08-22
  • 打赏
  • 举报
回复
你的函数在使用的地方和实现的地方定义不匹配?

15,472

社区成员

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

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