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

标签 delphi dll dllexport stdcall

我制作了一个 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通常用于提供语言中立的接口(interface),并且由于某些语言不支持默认参数,因此很少在DLL接口(interface)中使用它们。

关于delphi - 如何为 DLL 过程(stdcall)创建默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16419777/

相关文章:

c# - 导出非托管函数指针时发生访问冲突

c++ - ESP 的值未在函数调用错误中正确保存

delphi网络浏览器: how to prevent or hide that javascript error?

delphi - 简单 HTTPRIO 上的内存泄漏

c++ - 如何构建 64 位版本的 Crypto++ dll?

C# Pinvoke 并重新加载 DLL

delphi - 检测Skype是否位于 "Compact View"或 "Default View"

delphi - 在 dbctrlgrid 中显示 xml 文件内容

c# - 我如何强制使用 exe 构建 DLL,以便只有一个文件?

winapi - VS 2012 命名修改仍然适用于 dll 导出