0

我有带字符串参数的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);
4

1 回答 1

4

您不能从 C++ 调用该函数。Delphistring类型是私有的 Delphi 类型。对于互操作,您需要使用指向以空字符结尾的字符数组的指针。在 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);
于 2013-07-02T08:00:38.537 回答