Delphi中exe和DLL之间的TobjectList

时间:2013-03-19 15:45:43

标签: delphi dll tobjectlist

有人可以确认我在用Delphi编写的exe和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);

除了TobjectList

之外,@ TStack的内容很好

1 个答案:

答案 0 :(得分:5)

除非使用运行时包,否则不能跨模块边界传递Delphi对象。因此,在DLL和EXE之间,这是不可能的。

这种限制的原因是为了跨模块边界传递对象,您需要共享模块之间的类型。这对DLL和EXE来说是不可能的。不同模块之间的类型共享是运行时包的主要功能。

documentation解释了这样的限制:

  

图书馆比他们的图书馆更受限制   可以出口。库不能导出常量,类型和法线   变量。也就是说,不会看到库中定义的类类型   在使用该库的程序中。导出除简单之外的项目   程序和功能,包是推荐的替代方案。   只有在与其他人的互操作性时才应考虑库   编程是一项要求。

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