如何将德尔菲的"字符串数组"参数翻译成C++?

How to translate Delphi's “array of string” param to C++?

本文关键字:参数 数组 翻译 C++ 字符串      更新时间:2023-10-16

我正在尝试在我的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。不能跨互操作边界传递其中一个。Delphi主机尝试调用该DLL函数甚至是可疑的。

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

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

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