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