从 dll 读取矢量数据C++?
Read Vector Data from C++ dll?
我从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 的信息。
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 在运行时处理类型擦除的数据-如何不重新发明轮子