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

Delphi 如何为DLL过程(stdcall)创建默认参数?,delphi,dll,dllexport,stdcall,Delphi,Dll,Dllexport,Stdcall,我制作了一个DLL,可以导出几个函数(使用stdcall)。 我想让他们中的一些接受或不接受参数。所以一个懒惰的程序员可以直接调用它而不需要任何参数。 我在论坛的某个地方读到,默认参数在DLL-s中不起作用。我唯一的选择是创建两个不同名称的函数,如: procedure DoSomething(); begin DoSomethingParams(1, 'Hi'); end; procedure DoSomethingParams(one: Integer; two: PChar); be

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

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

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

??或者有一种更优雅的方法来实现这一点?

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

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

  • 在DLL代码中,导出函数。如果愿意,可以在那里指定默认参数,但这对DLL的使用者没有任何影响
  • 在导入DLL函数的代码中,声明默认参数。此时声明的默认值才是关键

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

“默认参数”是与语言相关的概念。有些语言没有它们-它们将如何查看您的DLL?好的,带有默认参数的过程只是普通过程,当您在调用站点忽略参数时,编译器会为您插入参数。很高兴知道,谢谢。但是,如果我的DLL用户是一个非常懒惰的人,并且不想用参数声明函数,该怎么办?我的解决方案是唯一的办法吗?为什么这对我很重要?我有一个DLL,可以导出一些函数。我想给一个DLL用户选项来调用类似问题中的所有函数。大多数情况下都会很好,结果会很好。但如果我的DLL用户需要,他可以指定参数来优化我的DLL结果。你知道选项是什么。我认为我的答案没有什么可补充的。如果你问了一个比评论中更具体的问题,也许我可以澄清一下。Tom,DLL用户必须声明包含所有参数的函数;从声明中省略参数将导致任何数量的问题。但是,该用户可以自由地为声明中的参数指定默认值,这样他或她在调用函数时就可以变得懒惰。如果您声明函数,那么用户可能会非常懒惰,因为他们根本不需要声明函数。他们可以只使用您在分发DLL时已经提供的声明。作为一个DLL分发者,你无论如何都应该这样做。@RobKennedy我将提供一个包装器,但不是所有可能的语言。当然不是,Tom。DLL的本机语言(本例中为Delphi)和C的绑定通常就足够了。