2017-05-27 105 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的內容。