DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

アプリケーションのエントリポイントを自作する

アプリケーションのエントリポイントとは、アプリケーションを開始した時、はじめに実行される場所のことです。コンソールアプリケーションやWindowsフォームアプリケーションには必ずエントリポイントが存在しますが、Visual Studioを使っている場合はエントリポイントが自動的に作成されますので、普段は特に意識する必要がありません。しかし、エントリポイントの知識が必要になるケースは意外と多いです。ここでは、Windowsフォームアプリケーションにおけるエントリポイントの説明と、エントリポイントを自分で作成する方法を紹介します。

補足:正確には、エントリポイントはエントリポイントメソッドの先頭ですが、ここではエントリポイントメソッドのことをエントリポイントと呼ぶことにします。

Visual Studioが作成するエントリポイントの位置と内容

まずは、Visual StudioでWindowsフォームアプリケーションのプロジェクトを新規作成した直後の、既定のエントリポイントについて確認しておきましょう。

VB.NETの場合

VB.NETでは、Mainメソッド(またはプロシージャ)がエントリポイントです。ところが、Windowsフォームアプリケーションプロジェクトのどこを探してもMainメソッドがありません。エントリポイントとなるMainメソッドは、コンパイラによって自動的に作成されます。

補足:自動的に作成されるMainメソッドは、Visual Studio 2005以降でアプリケーションフレームワークを有効にしているならば、MyApplicationクラスに作成されます。それ以外では、フォームクラスに作成されます。

C#の場合

C#では、Mainメソッドがエントリポイントです。Mainメソッドが作成される場所は、Visual Studio 2003以前とVisual Studio 2005以降で異なります。

Visual Studio 2005以降では、Program.csファイルのProgramクラスにMainメソッドが作成されます。コードは、次のようなものです。

C#
コードを隠すコードを選択
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

Visual Studio 2003以前では、フォームクラス(Form1クラス)にMainメソッドが作成され、これがエントリポイントになります。そのコードは、次のようなものです。

C#
コードを隠すコードを選択
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main() 
{
    Application.Run(new Form1());
}

これらのコードは、Visual Studioのデザイナが管理しているコードに当たりませんので、ユーザーが直接書き換えても問題ありません(もちろん正しいコードを書く必要はありますが)。よって、C#では新たにMainメソッドを作成しなければならないケースはほとんど無いでしょう。

Mainメソッドを作成する

エントリポイントにするMainメソッドを記述する場所はどこでも構いませんが、新たにMainメソッドを作成するのであれば、新しいクラスを作成し、そこに記述をするのが分かりやすいでしょう。

VB.NETの場合

VB.NETの場合は、プロジェクトに新しいクラスかモジュールを追加します。メニューの「プロジェクト」-「新しい項目の追加」で追加できます。そしてそこにSub Mainを記述します。

以下はSub Mainをモジュールに記述したときの例です。

VB.NET
コードを隠すコードを選択
Module Program
    <STAThread()> _
    Sub Main()
        Application.Run(New Form1())
    End Sub
End Module

以下はSub Mainをクラスに記述したときの例です。

VB.NET
コードを隠すコードを選択
Public Class Program
    <STAThread()> _
    Shared Sub Main()
        Application.Run(New Form1())
    End Sub
End Class

なお、.NET Framework 2.0以降では、次のようにEnableVisualStylesやSetCompatibleTextRenderingDefaultも記述した方がよいでしょう。(以下は、モジュールの例のみです。)

VB.NET
コードを隠すコードを選択
Module Program
    <STAThread()> _
    Sub Main()
        Application.EnableVisualStyles()
        Application.SetCompatibleTextRenderingDefault(False)
        Application.Run(New Form1())
    End Sub
End Module

C#の場合

C#の場合は、新しいクラスをプロジェクトに作成して、静的なMainメソッドを記述します。Mainメソッドのコードは、前述したVisual Studioが作成するコードをそのまま使えばよいでしょう。

エントリポイントを変更する

新しく作成したMainメソッドをエントリポイントにするには、エントリポイントを変更する操作が必要です。エントリポイントを変更する方法は、「アプリケーションが始まるときに呼び出す位置(エントリポイント)を変更する」で説明します。

上記コードの詳しい説明

蛇足ですが、気になる方のために、上に示したコードの説明をします。

Application.Runメソッドについては、こちらで説明しています。STAThreadAttribute属性の必要性については、こちらで説明しています。

Application.EnableVisualStylesは、コントロールをビジュアルスタイルで表示するためのものです。この説明は、「コントロールの外観をビジュアルスタイル(XPスタイル)にする」で行っています。

Application.SetCompatibleTextRenderingDefaultは、コントロールのテキストをGDIでレンダリングするためのものです。詳しくはこちらをご覧ください。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。