关于__stdcall 与 __cdecl 的问题。

njtu 2003-07-29 10:55:21
如果动态库中导出的函数声明是:
extern "C" __declspec(dllexport) __stdcall int mydllfunc(int);
我在使用动态库时导入:
extern "C" __declspec(dllimport) int mydllfunc(int);

extern "C" __declspec(dllimport) int __stdcall mydllfunc(int);

两种声明都是正确的吗?两种情况有什么区别?
...全文
80 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
njtu 2003-08-12
  • 打赏
  • 举报
回复
尽管大家说的都是正确的,但是大家还是没有回答我的问题:
如果动态库中导出的函数声明是:
extern "C" __declspec(dllexport) __stdcall int mydllfunc(int);
我在使用动态库时导入:
//这应该是非法的吧?可是为什么编译器能够通过
extern "C" __declspec(dllimport) int mydllfunc(int);

//这应该是正确的,为什么编译时会认为__stdcall mydllfunc(int)是无法解析的外部符号?
extern "C" __declspec(dllimport) int __stdcall mydllfunc(int);

所以,我只好把分给最后一位明白了我的意思,却与我一样不明白的兄弟。
lw535 2003-08-07
  • 打赏
  • 举报
回复
我也有同样的疑惑,实际证明是,导入中加了__stdcall反而报错。导入是默认的__codec,导出是__stdcall,反而能通过。

谁能澄清一下,导入和导出函数的调用约定是否应一致??
njtu 2003-08-07
  • 打赏
  • 举报
回复
但我的动态库,导出声明是stall啊
extern "C" __declspec(dllexport) __stdcall int mydllfunc(int);

倒入声明:
extern "C" __declspec(dllimport) int mydllfunc(int);

会改变调用方式吗?
njtu 2003-08-07
  • 打赏
  • 举报
回复
但我的动态库,导出声明是stall啊
extern "C" __declspec(dllexport) __stdcall int mydllfunc(int);

倒入声明:
extern "C" __declspec(dllimport) int mydllfunc(int);

会改变调用方式吗?
AkiraChing 2003-08-06
  • 打赏
  • 举报
回复
两种声明是不同的,vc默认的调用是__cdecl ,所以 extern "C" __declspec(dllimport) int mydllfunc(int);是extern "C" __declspec(dllimport) int __cdecl mydllfunc(int);
因此和extern "C" __declspec(dllimport) int __stdcall mydllfunc(int);是有区别的
FAICHEN 2003-08-06
  • 打赏
  • 举报
回复
delphi默认是register
zhangxiaoping 2003-08-06
  • 打赏
  • 举报
回复
delhpi默认调用约定是_stdcall???


怎么我看delphi7帮助文档说是默认是register
newlife2002_313 2003-07-29
  • 打赏
  • 举报
回复
当有多个参数时,就会出现Debug error,调用参数形式与声明参数形式不一致。
FAICHEN 2003-07-29
  • 打赏
  • 举报
回复
c的默认调用约定是_cdecl
delhpi默认调用约定是_stdcall
协调一致就行
lsw0794 2003-07-29
  • 打赏
  • 举报
回复
你如果是用mfc或者window.h,调用方式都是__stdcall,从右到左的。
whoo 2003-07-29
  • 打赏
  • 举报
回复
调用约定主要关系到入栈的顺序的清站的责任。

你的函数只有一个参数,不管是从右到左还是从左到右都是一样的。有可能刚好正常。

多家几个参数就可以看到效果了。
xiaohedou 2003-07-29
  • 打赏
  • 举报
回复
是这样的主要是入栈顺序问题,关键是一致性!
jiadrun 2003-07-29
  • 打赏
  • 举报
回复
up
wj59 2003-07-29
  • 打赏
  • 举报
回复
yes

15,471

社区成员

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

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