2017-05-27 77 views
-3

我有一个问题,从C++ dll.I读取数据必须用C proccee数据++的dll和Delphi.I我的UI写作要在从TList传递给DLL,然后DLL插入一些数据到list.Is有任何方式来做到这一点?更好的例子,最好的问候。从C++ dll读取矢量数据?

+0

欢迎堆栈溢出。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –

+0

@Victoria Wut ?? –

+0

@维多利亚你应该再次仔细阅读我的个人资料。 –

回答

2

不能具体德尔福型状TList传递到C++ DLL,除非DLL写在C++ Builder中。

C++编译器将不能够处理特定的Delphi型的TList(或任何其他类,动态阵列,串,集,阵列开放等)。而且Delphi不能处理C++ vector类型(或任何其他模板或类类型)。 所以干脆不要这样做

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

而且注意,C++ Builder中的包都没有解决的办法:Delphi不能使用写在C++ Builder的BPLs。不过,C++ Builder可以使用Delphi包。

所以只是通过普通的旧数据(POD)类型。传递简单类型的数组或简单类型的结构体/记录,并将数组作为指针传递给第一个元素。不要尝试传递动态数组或打开数组参数。这些都是特定于Delphi的。

可以使用动态阵列上的德尔福的一面,只要你只是一个指针传递给第一个元素,而你分配足够的空间DLL来填充它。不要让DLL管理内存或尝试重新分配阵列。它不能。作为额外参数传递数据的最大长度。该DLL应该只有填充该阵列,不再。


对于它的价值,我写了一篇关于DLL dos and don'ts。请阅读并注意它。这篇文章更详细地解释了我上面所写的内容,以及更多关于编写跨语言边界使用的DLL的内容。