3

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

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

procedure DoSomethingParams(one: Integer; two: PChar);
begin
//
end; 

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

4

1 回答 1

6

默认参数可以与 DLL 一起使用。但默认参数必须在函数导入时声明,而不是在导出时声明。这是因为默认参数是在调用站点实现的。调用者检测到参数丢失并生成代码以提供丢失的参数。

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

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

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

于 2013-05-07T13:21:36.210 回答