在Delphi EXE和DLL之间TobjectList(TobjectList between e

2019-07-22 00:39发布

有人可以证实我,这是不可能的exe文件,并在Delphi编写包含TobjectList指向一个DLL之间的交流?

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内容

Answer 1:

除非你正在使用运行时包不能跨模块边界传递德尔福对象。 因此,一个DLL和一个EXE之间,这是不可能的。

这样做的原因限制是为了通过跨模块边界的对象,你需要在模块之间共享的类型。 而这是不可能用一个DLL和一个EXE。 的不同模块之间的类型的共享是运行时包的主要功能。

该文档解释了这样的限制:

图书馆是显著比他们可以导出哪些软件包较为有限。 库不能导出常量,类型,和正常的变量。 也就是说,在一个库中定义的类类型将不会在使用该库的程序可见。 要导出比简单的程序和功能的其他物品,包推荐的替代方案。 当与其他编程的互操作性是必需的库时,才可考虑。

如果你必须使用的DLL,那么你需要找到一些其他的方式来互操作。 一个很好的选择是使用接口。



文章来源: TobjectList between exe and DLL in Delphi