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