TForm サブクラス、たとえばTForm_Subを含む*.bpl プロジェクトBPL_Aを作成します。
ヘッダー ファイルForm_Sub.hは次のように なります。
class PACKAGE TForm_Sub : public TForm
{
...
};
extern PACKAGE TForm_Sub* Form_Sub;
ソース ファイルForm_Sub.cppは次のようになります。
TForm_Sub* Form_Sub;
__fastcall TForm_Sub::TForm_Sub( TComponent* Owner )
{
...
}
そして、別の *.bpl プロジェクトBPL_Bを作成して、TForm_Sub インスタンスを動的に作成します。
class PACKAGE SomeClass
{
public:
TForm* CreateUI( const AnsiString& name );
};
#include "Form_Sub.h"
TForm* SomeClass::CreateUI( const AnsiString& name )
{
if( name == xxx )
{
if( Form_Sub != NULL )
{
Form_Sub = new TForm_Sub( owner );
}
return Form_Sub;
}
}
BPL_B の Requires セクションに BPL_A.bpi を追加します。ただし、BPL_B をビルドすると、次のリンク エラーが発生します。
[ILINK32 エラー] エラー: モジュール xxx.OBJ 内の SomeClass::CreateUI() をエクスポートすると、ユニット BPL_A]Form_Sub 内の __fastcall TForm_Sub::TForm_Sub() が参照されます。
何が欠けているのかわかりません。