从 dll 读取矢量数据C++?

Read Vector Data from C++ dll?

本文关键字:数据 C++ dll 读取      更新时间:2023-10-16

我从C++ dll读取数据时遇到问题.我必须在C++dll中处理数据,并由Delphi编写我的UI.我想将TList传递给dll,然后将一些数据插入列表中。有什么办法吗?例子更好,最好的问候。

不能将特定于 Delphi 的类型(如TList)传递给 C++ DLL,除非该 DLL 是在 C++Builder 中编写的。

C++编译器将无法处理特定于 Delphi 的类型 TList(或任何其他类、动态数组、字符串、集合、开放数组等)。德尔福无法处理C++vector类型(或任何其他模板或类类型)。所以干脆不要这样做

即使您的 DLL 是用与 Delphi 编译器相同版本的 C++Builder 编写的,它知道TList,您仍然会遇到问题,因为您正在处理 RTL 的两个不同实例,所以很多事情也无法正常工作(内存管理、RTTI 等)。

请注意,C++Builder软件包也不是解决方案:Delphi不能使用用C++Builder编写的BPL。不过,C++Builder可以使用Delphi软件包。

因此,只需传递普通旧数据 (POD) 类型。传递简单类型的数组或简单类型的结构/记录,并将数组作为指针传递(指向第一个元素)。不要尝试传递动态数组或打开数组参数。这些又是德尔菲特有的。

您可以在Delphi 端使用动态数组,只要您只传递指向第一个元素的指针,并且您为 DLl 分配了足够的空间来填充它。不要让 DLL 管理内存或尝试重新分配数组。不能。将数据的最大长度作为额外参数传递。DLL 应该只填充数组,不能再填充数组。


对于它的价值,我写了一篇关于DLL该做和不该做的文章。请阅读并注意它。本文更详细地解释了我上面写的内容,以及更多关于编写要跨语言边界使用的 DLL 的信息。