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

标签 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);

最佳答案

您不能从 C++ 调用该函数。 Delphi string 类型是私有(private)的 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/

相关文章:

c++ - 无法从头文件访问函数

c++ - 如何在 vim 中创建映射以自动执行 .h C++ 文件的 ifdef 命令

C++内存对齐

delphi - 如何在版本控制中使用第三方组件管理 Delphi 项目?

delphi - 使用接口(interface)时出现内存泄漏问题?

windows - 德尔福 : how to preload modules loaded by TOpenDialog?

delphi - 自定义组件如何处理其子组件的事件?

c++ - 生成没有 stub 的 WSDL 请求/响应

c++ - 绕过私有(private)复制构造函数/复制赋值 C++

Delphi Mobile App 通过 Tidtcpclient 发送图片(连接正常关闭)