チュートリアル: Visual Basic での COM オブジェクトの作成

新しいアプリケーションまたはコンポーネントを作成する場合は、.NET Framework アセンブリを作成することをお勧めします。 ただし、Visual Basic を使用すると、COM への .NET Framework コンポーネントの公開も簡単になります。 これにより、COM コンポーネントを必要とする以前のアプリケーション スイートに対して新しいコンポーネントが提供できるようになります。 このチュートリアルでは、Visual Basic を使用して、COM クラス テンプレートを使用するかどうかにかかわらず、.NET Framework オブジェクトを COM オブジェクトとして公開する方法について説明します。

COM オブジェクトを公開する最も簡単な方法は、COM クラス テンプレートを使用することです。 このテンプレートでは、新しいクラスが作成され、クラスと相互運用性レイヤーを COM オブジェクトとして生成してオペレーティング システムに登録するようにプロジェクトが構成されます。

注意

Visual Basic で作成されたクラスをアンマネージド コードで使用できるように COM オブジェクトとして公開することもできますが、これは実際の COM オブジェクトではなく、Visual Basic では使用できません。 詳細については、「.NET Framework アプリケーションにおける COM 相互運用性」を参照してください。

注意

次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「IDE をカスタマイズする」をご覧ください。

COM クラス テンプレートを使用して COM オブジェクトを作成するには

  1. [新しいプロジェクト] をクリックして、 [ファイル] メニューから新しい Windows アプリケーション プロジェクトを開きます。

  2. [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] フィールドで、[Windows] が選択されていることを確認します。 [テンプレート] の一覧から [クラス ライブラリ] を選択し、 [OK] をクリックします。 新しいプロジェクトが表示されます。

  3. [プロジェクト] メニューの [新しい項目の追加] を選択します。 [新しい項目の追加] ダイアログ ボックスが表示されます。

  4. [テンプレート] の一覧から [COM クラス] を選択し、 [追加] をクリックします。 Visual Basic は、新しいクラスを追加し、COM 相互運用のための新しいプロジェクトを構成します。

  5. プロパティ、メソッド、イベントなどのコードを COM クラスに追加します。

  6. [ビルド] メニューから [ClassLibrary1 のビルド] を選択します。 Visual Basic は、アセンブリをビルドし、オペレーティング システムに COM オブジェクトを登録します。

COM クラス テンプレートを使用しない COM オブジェクトの作成

COM クラス テンプレートを使用する代わりに、手動で COM クラスを作成することもできます。 この手順は、コマンド ラインから作業する場合や、COM オブジェクトの定義方法をより細かく制御する必要がある場合に便利です。

COM オブジェクトを生成するようにプロジェクトを設定するには

  1. [新しいプロジェクト] をクリックして、 [ファイル] メニューから新しい Windows アプリケーション プロジェクトを開きます。

  2. [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] フィールドで、[Windows] が選択されていることを確認します。 [テンプレート] の一覧から [クラス ライブラリ] を選択し、 [OK] をクリックします。 新しいプロジェクトが表示されます。

  3. ソリューション エクスプローラーで、プロジェクトを右クリックして、 [プロパティ] をクリックします。 プロジェクト デザイナーが表示されます。

  4. [コンパイル] タブをクリックします。

  5. [COM の相互運用機能に登録] チェック ボックスをオンにします。

COM オブジェクトを作成するためにクラス内のコードを設定するには

  1. ソリューション エクスプローラーで、 [Class1.vb] をダブルクリックしてコードを表示します。

  2. クラスの名前を ComClass1 に変更します。

  3. 次の定数を ComClass1 に追加します。 これにより、COM オブジェクトに必要なグローバル一意識別子 (GUID) 定数が格納されます。

    Public Const ClassId As String = ""
    Public Const InterfaceId As String = ""
    Public Const EventsId As String = ""
    
  4. [ツール] メニューの [GUID の作成] をクリックします。 [GUID の作成] ダイアログ ボックスで、 [レジストリ形式] をクリックし、 [コピー] をクリックします。 [終了] をクリックします。

  5. ClassId の空の文字列を GUID に置き換え、先頭と末尾の中かっこを削除します。 たとえば、Guidgen によって提供された GUID が "{2C8B0AEE-02C9-486e-B809-C780A11530FE}" の場合、コードは次のようになります。

    Public Const ClassId As String = "2C8B0AEE-02C9-486e-B809-C780A11530FE"
    
  6. 次の例に示すように、InterfaceIdEventsId の定数に対して前のステップを繰り返します。

    Public Const InterfaceId As String = "3D8B5BA4-FB8C-5ff8-8468-11BF6BD5CF91"
    Public Const EventsId As String = "2B691787-6ED7-401e-90A4-B3B9C0360E31"
    

    注意

    GUID が新しく、一意であることを確認します。そうでない場合、COM コンポーネントは他の COM コンポーネントと競合する可能性があります。

  7. 次の例に示すように、ComClass 属性を ComClass1 に追加して、クラス ID、インターフェイス ID、およびイベント ID の GUID を指定します。

    <ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)>
    Public Class ComClass1
    
  8. COM クラスにはパラメーターなしの Public Sub New() コンストラクターが必要です。そうでない場合、クラスが正しく登録されません。 クラスにパラメーターなしのコンストラクターを追加します。

    Public Sub New()
        MyBase.New()
    End Sub
    
  9. プロパティ、メソッド、およびイベントをクラスに追加し、End Class ステートメントで終了します。 [ビルド] メニューの [ソリューションのビルド] をクリックします。 Visual Basic は、アセンブリをビルドし、オペレーティング システムに COM オブジェクトを登録します。

    注意

    Visual Basic で生成した COM オブジェクトは、実際の COM オブジェクトではないため、他の Visual Basic アプリケーションでは使用できません。 そのような COM オブジェクトに参照を追加しようとすると、エラーが発生します。 詳細については、「.NET Framework アプリケーションにおける COM 相互運用性」を参照してください。

関連項目