TobjectList между exe и DLL в Delphi

может ли кто-нибудь подтвердить мне, что невозможно обменять между exe и dLL, написанным в Delphi, указатель, содержащий 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


person Manu13    schedule 19.03.2013    source источник


Ответы (1)


Вы не можете передавать объекты Delphi через границу модуля, если только вы не используете пакеты времени выполнения. Таким образом, между DLL и EXE это невозможно.

Причина этого ограничения заключается в том, что для передачи объектов через границы модулей вам необходимо совместно использовать типы между модулями. И это невозможно с DLL и EXE. Совместное использование типов между различными модулями является основной функциональностью пакетов среды выполнения.

В документации это ограничение объясняется следующим образом:

Библиотеки значительно более ограничены, чем пакеты, в том, что они могут экспортировать. Библиотеки не могут экспортировать константы, типы и обычные переменные. То есть типы классов, определенные в библиотеке, не будут видны в программе, использующей эту библиотеку. Для экспорта элементов, отличных от простых процедур и функций, рекомендуемой альтернативой являются пакеты. Библиотеки следует рассматривать только тогда, когда требуется взаимодействие с другим программным обеспечением.

Если вы должны использовать библиотеки DLL, вам нужно найти какой-то другой способ взаимодействия. Одним из хороших вариантов является использование интерфейсов.

person David Heffernan    schedule 19.03.2013
comment
Вы надеетесь на большее, чем этот ответ? - person David Heffernan; 20.03.2013