簡體   English   中英

EXE和DLL在DELPHI之間的TobjectList

[英]TobjectList between exe and DLL in Delphi

有人可以確認我,在exe和用Delphi編寫的dLL之間不能交換包含TobjectList的指針嗎?

Class definition shared between DLL and EXE
TCMStack = CLASS(TObject)
PRIVATE
FEquipment: TCMEquipment;         /// equipement with associated constraints
FNbCoils: integer;                  /// coils used
FListeCoils: TCoilsList;            ///coil list associaed with a stack
....

在可執行代碼中:

...
/// Transfer business information to optimisation module
/// fOptimisation is a instance of class 
fOptimisation.TransfererDonneesMetiersDansOptimisation(@TStack, LEVEL_OPTIM_1, false);

@TStack的內容很好,除了TobjectList

除非使用運行時程序包,否則不能跨越模塊邊界傳遞Delphi對象。 因此,在DLL和EXE之間是不可能的。

該限制的原因是,為了跨模塊邊界傳遞對象,您需要在模塊之間共享類型。 而使用DLL和EXE是不可能的。 不同模塊之間的類型共享是運行時程序包的主要功能。

文檔解釋了這樣的限制:

庫在可導出內容方面比軟件包明顯更受限制。 庫無法導出常量,類型和普通變量。 也就是說,在庫中定義的類類型將不會在使用該庫的程序中看到。 要導出除簡單過程和功能以外的項目,建議使用軟件包。 僅在需要與其他程序進行互操作時才應考慮使用庫。

如果必須使用DLL,則需要找到其他互操作方式。 一種不錯的選擇是使用接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM