如何为 DLL 过程(stdcall)创建默认参数?

Tom*_*Tom 3 delphi dll stdcall dllexport

我制作了一个导出多个函数的 DLL(使用 stdcall)。我想让他们中的一些人接受或不接受参数。所以懒惰的程序员可以不带任何参数调用它。我在论坛上的某个地方读到默认参数在 DLL-s 中不起作用。我唯一的选择是创建 2 个具有不同名称的函数,例如:

procedure DoSomething();
begin
  DoSomethingParams(1, 'Hi');
end;

procedure DoSomethingParams(one: Integer; two: PChar);
begin
//
end; 
Run Code Online (Sandbox Code Playgroud)

? 或者也许有更优雅的方式来实现这一目标?

Dav*_*nan 6

默认参数可用于 DLL。但是必须在导入函数时声明默认参数,而不是在导出函数时声明。那是因为默认参数是在调用站点实现的。调用者检测到缺少参数并生成代码来提供缺少的参数。

因此,您可以在导入 DLL 时使用默认参数,前提是使用 DLL 的语言支持该参数。

  • 在 DLL 代码中,导出函数。如果您愿意,您可以在那里指定默认参数,但它不会对 DLL 的使用者产生任何影响。
  • 在导入 DLL 函数的代码中,声明您的默认参数。重要的是此时声明的默认值。

由于 DLL 通常用于提供与语言无关的接口,并且由于某些语言不支持默认参数,因此很少在 DLL 接口中使用它们。