ローカルな名前空間に置かれたフォームを自動作成する

ローカルな名前空間に置かれたフォームを自動作成しようとすると、リンク時にエラーとなります。それを回避するには、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

戻る