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 を使用する必要がある場合は、相互運用する他の方法を見つける必要があります。良いオプションの 1 つは、インターフェイスを使用することです。

于 2013-03-19T15:47:35.377 に答える