将char *传递给delphi dll函数/过程

时间:2013-07-02 07:50:37

标签: c++ delphi

我有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);

1 个答案:

答案 0 :(得分:4)

您无法从C ++调用该函数。 Delphi string类型是私有的Delphi类型。对于互操作,您将需要使用指向以null结尾的字符数组的指针。在C ++中char*,在Delphi中是PAnsiChar

此外,您的Delphi函数使用register调用约定,该约定是基于寄存器的fastcall约定。同样,您无法从其他语言访问它。您需要使用其中一种标准调用约定。

C ++代码中的函数指针已经传递char*,并使用cdecl调用约定。所以你只需要让Delphi函数匹配:

function a(param: PAnsiChar): integer; cdecl;

上述声明与您问题中的C ++代码兼容。


如果您更喜欢使用stdcall,那么您需要更改Delphi和C ++代码。

<强>的Delphi

function a(param: PAnsiChar): integer; stdcall;

<强> C ++

typedef int (__stdcall *StringFunction) (char *a);