加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 导入函数需要stdcall吗?

发布时间:2020-12-15 09:38:19 所属栏目:大数据 来源:网络整理
导读:我很好奇这个: 当我从使用stdcall调用约定导出的动态链接库导入函数时,是否必须在从V7开始的Delphi中在外部添加stdcall? 即 LIBNAME int __stdcall Foo(void); 如 function Foo: Integer; stdcall; external 'libname.dll'; 或者我可以逃脱 function Foo:
我很好奇这个:

当我从使用stdcall调用约定导出的动态链接库导入函数时,是否必须在从V7开始的Delphi中在外部添加stdcall?

LIBNAME int __stdcall Foo(void);

function Foo: Integer; stdcall; external 'libname.dll';

或者我可以逃脱

function Foo: Integer; external 'libname.dll';

IIRC默认情况下会使用stdcall,但我不是100%肯定,你的意见是必需的.

编辑:

问题与32位库有关,Arnaud Bouchez提出了一个很好的观点,对于64位,调用约定没有被考虑,因为只有一个.

解决方法

如果省略stdcall,则将使用默认调用约定寄存器.所以你必须包括那个stdcall.

您使用外部的事实不会改变任何东西.默认调用约定是寄存器,即使对于外部导入也是如此.

当然,这仅在编译32位时才有意义.在x64 Windows上,在ABI中指定了单个调用约定.在x64 Windows上,将忽略代码中指定的所有调用约定,并且所有函数调用都是使用Windows x64调用约定生成的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读