我很好奇:
当我从使用 stdcall 调用约定导出的动态链接库导入函数时,是否必须在外部之前添加 stdcall Delphi从版本7开始?
即
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位,调用约定没有被考虑,因为只有一个。
答案 0 :(得分:10)
如果省略stdcall
,则将使用默认调用约定register
。因此,您必须包含stdcall
。
您使用external
这一事实并未改变任何内容。默认的调用约定是register
,即使对于外部导入也是如此。
当然,这仅在编译32位时才有意义。在x64 Windows上,ABI中指定了一个调用约定。在x64 Windows上,将忽略代码中指定的所有调用约定,并使用Windows x64调用约定进行所有函数调用。