Delphi中exe和DLL之间的TobjectList

Man*_*u13 1 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
....
Run Code Online (Sandbox Code Playgroud)

在可执行代码中:

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

除了TobjectList之外,@ TStack的内容都很好

Dav*_*nan 5

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

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

文档解释了这样的限制:

他们可以导出的库比包更加有限.库不能导出常量,类型和常规变量.也就是说,在使用该库的程序中将看不到库中定义的类类型.要导出除简单过程和函数之外的项目,建议使用包.只有在需要与其他编程互操作时才应考虑库.

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