我对此感到好奇:

当我从使用stdcall调用约定导出的动态链接库中导入函数时,是否必须从版本7开始在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,则将使用默认的调用约定register。因此,您必须包括该stdcall

您正在使用external的事实不会更改任何内容。默认调用约定为register,即使对于外部导入也是如此。

当然,这仅在编译32位时才重要。在x64 Windows上,在ABI中指定了一个调用约定。在x64 Windows上,将忽略代码中指定的所有调用约定,并使用Windows x64调用约定进行所有函数调用。

10-04 18:37