次の方法で共有


チュートリアル: Visual Basic を使用した COM オブジェクトの作成

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

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

アンマネージ コードで使用する COM オブジェクトとして Visual Basic で作成されたクラスを公開することもできますが、これは真の 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. [ビルド] メニューから [ Build ClassLibrary1 ] 選択します。 Visual Basic によってアセンブリがビルドされ、COM オブジェクトがオペレーティング システムに登録されます。

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

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

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

  1. [ ファイル ] メニューの [ NewProject] をクリックして、新しい 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. 次の例のように、 InterfaceId 定数と EventsId 定数に対して前の手順を繰り返します。

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

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

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

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

こちらも参照ください