如何将德尔菲的"字符串数组"参数翻译成C++?
How to translate Delphi's “array of string” param to C++?
我正在尝试在我的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作为桥梁。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 估计函数参数数组的维度
- 温度参数数组的内存泄漏
- 如何将值附加到命令行参数数组?
- libpqxx:如何绑定参数数组
- 如何在德尔福中C++参数数组指针算术
- C++函数参数或参数数组
- 将 std::function 代理为需要参数数组的 C 函数
- 分析字符串参数数组
- Pro*C传递参数数组
- OpenCV错误:cvGetSize中的错误参数(数组应该是CvMat或IplImage)
- c++无限参数数组
- 查找命令行参数数组中的元素数
- 如何将目录中所有具有完整路径的文件传递到execv中的参数数组
- ODBC:参数数组-忽略参数
- 使用lambda参数数组