ローカルな名前空間に置かれたフォームを自動作成する
ローカルな名前空間に置かれたフォームを自動作成しようとすると、リンク時にエラーとなります。それを回避するには、USEFORMマクロをフォームと同じ名前空間内に置き、using指令を使い、リンカがフォームの識別子を見つけられるようにします。例えば、次のようにします。
Unit1.h:
//---------------------------------------------------------------------------
namespace Unit1
{
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
// ...
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1* Form1;
//---------------------------------------------------------------------------
} // End of namespace Unit1
using namespace Unit1;
//---------------------------------------------------------------------------
Unit1.cpp:
//---------------------------------------------------------------------------
namespace Unit1
{
//---------------------------------------------------------------------------
TForm1* Form1 = NULL;
//---------------------------------------------------------------------------
// ...
//---------------------------------------------------------------------------
} // End of namespace Unit1
using namespace Unit1;
//---------------------------------------------------------------------------
Project1.cpp:
//---------------------------------------------------------------------------
// 名前空間を操作してリンカがフォームの識別子を見つけられるようにしている
namespace Unit1
{
USEFORM("Unit1.cpp", Form1);
} // End of namespace Unit1
using namespace Unit1;
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
最終更新: 2008-07-03
戻る