在我的 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 的正确过程是什么?
最佳答案
LPCSTR
和 LPSTR
对应于 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/