1

有人可以确认我无法在 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);

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

4

1 回答 1

5

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

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

文档解释了这样的限制:

库在它们可以导出的内容方面比包受到的限制要多得多。库不能导出常量、类型和普通变量。也就是说,在一个库中定义的类类型将不会在使用该库的程序中看到。要导出简单过程和函数以外的项目,建议使用包。只有在需要与其他编程的互操作性时才应考虑库。

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

于 2013-03-19T15:47:35.377 回答