delphi - 从 Delphi 程序调用 C DLL

标签 delphi dll parameters type-conversion

在我的 Delphi 代码中,我必须使用以下原型(prototype)调用 DLL 的函数(用 Visual C 编写):

int PWFunc(LPCSTR szName, int nWidth, int nHeight, LPCSTR szFileName)

如何将 Delphi AnsiString 变量(名称和文件名)转换为函数调用的正确类型参数(LPCSTR szName 和 szFileName)? 我知道 VC LPCSTR 类型对应于 Delphi PAnsiChar 类型,但是将 AnsiString 转换为 PAnsiChar 的正确过程是什么?

最佳答案

LPCSTRLPSTR 对应于 PAnsiChar,所以这就是您使用的:

function PWFunc(szName: PAnsiChar; nWidth, nHeight: Longint;
  szFileName: PAnsiChar): Longint; cdecl { or stdcall, see documentation };
  external 'somedll.dll' name 'PWFunc';

你这样调用它:

X := PWFunc(PAnsiChar(AnsiString(SomeName)), 17, 33, 
       PAnsiChar(AnsiString(SomeFileName)));

您的函数是 stdcall 还是 dcecl 取决于编译器设置。阅读文档。如果有疑问,请尝试两者。对我来说,它看起来像 cdecl,所以就从它开始吧。

关于delphi - 从 Delphi 程序调用 C DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14940771/

相关文章:

delphi - cxgrid列过滤器选项“之间”

德尔福XE2 : Possible to instantiate a FireMonkey Form in VCL application?

dll - 如何使用 CMake 将 DLL 文件复制到与可执行文件相同的文件夹中?

c# - 让 C# 识别 Visual Studio 之外的 dll

C++:即使缺少第 3 方 DLL,也允许程序运行?

Delphi-如何获取我的完整域名

delphi - 如何知道在应用程序图标上拖放了多少文件?

javascript - Rails 4 - 将 Google Maps API JSON 返回值发送到 Controller

HTML 表单 - 当 URL 包含 index.aspx 时,action=URL 的输入类型提交问题

java - 从REST Web服务中的curl命令获取参数