gpt4 book ai didi

c++ - 如何将 Delphi 的 “array of string” 参数翻译成 C++?

转载 作者:行者123 更新时间:2023-11-28 03:01:38 24 4
gpt4 key购买 nike

我正在尝试在我的 C++ 程序 (Visual Studio 2008) 中使用用 Delphi 编写的 DLL。在 DLL 文档中,函数声明为:

function ReadInfo(pRetBuffer: Pointer) : boolean;

其中 pRetBuffer - 指向返回结果的“字符串数组”类型变量的指针。我应该如何在 C++ 中声明此参数(字符串数组)?

在 DLL 的文档中,我有一个如何在 Delphi 中使用此函数的示例:

function ReadInfo(pRetBuffer: Pointer): boolean; stdcall; external 'SOME.dll'

var
RetBuffer: array of string;
.
.
.

procedure Test();
var
Result: Boolean;
begin
.
.
.
Result := ReadInfo(@RetBuffer);
.
.
.
end;

最佳答案

简单的答案是您不能从 C++ 调用该函数。 Delphi array of string 变量是托管类型,对 Delphi 是私有(private)的。您不能将其中之一传递到互操作边界。 Delphi 主机试图调用该 DLL 函数甚至是可疑的。

您需要更改函数以使用有效的互操作类型。

您可以使用 SAFEARRAY。您可以让 DLL 返回一个指向以空结尾的 PChar 数组的指针。但是您随后需要导出一个解除分配器,或者分配一个共享堆,例如 COM 堆。使用 BSTR 执行此操作,同时解决分配问题。

或者,正如您自己在评论中建议的那样,您可以使用 Delphi DLL 作为桥梁。

关于c++ - 如何将 Delphi 的 “array of string” 参数翻译成 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20669282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com