我对此感到好奇:
当我从使用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调用约定进行所有函数调用。