我有采用字符串参数的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类型是私有的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/

10-14 16:28
查看更多