我有一个带字符串参数的delphi函数:
function a(param: string): integer;
begin
{do something}
end
如何从 C++ 中调用该函数?我将字符串切换为 pchar 或 pansichar,但这没有用。 C++ typedef 是
typedef int (*StringFunction) (char *a);
我运行它就像
char *b = "abc";
StringFunction sf;
//loading sf
cout << sf(b);
最佳答案
您不能从 C++ 调用该函数。 Delphi string
类型是私有(private)的 Delphi 类型。对于互操作,您需要使用指向以 null 结尾的字符数组的指针。在 C++ 中是 char*
,在 Delphi 中是 PAnsiChar
。
此外,您的 Delphi 函数使用 register
调用约定,这是一个基于寄存器的 fastcall
约定。同样,您无法从其他语言访问它。您需要使用其中一种标准调用约定。
您的 C++ 代码中的函数指针已经传递了一个 char*
,并使用了 cdecl
调用约定。所以你只需要使 Delphi 函数匹配:
function a(param: PAnsiChar): integer; cdecl;
上述声明与您问题中的 C++ 代码兼容。
如果您更喜欢使用 stdcall
,那么您需要更改 Delphi 和 C++ 代码。
德尔福
function a(param: PAnsiChar): integer; stdcall;
C++
typedef int (__stdcall *StringFunction) (char *a);
关于c++ - 将 char * 传递给 delphi dll 函数/过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420229/