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

更新 : 2007 年 11 月

新しいアプリケーションまたはコンポーネントを作成する場合は、.NET Framework アセンブリを作成します。また、Visual Basic を使用することで、.NET Framework コンポーネントを COM に公開することもできます。これにより、COM コンポーネントを必要とする以前のアプリケーション スイートに新しいコンポーネントを作成できるようになります。このチュートリアルでは、Visual Basic を使用して .NET Framework オブジェクトを COM オブジェクトとして公開する方法を、COM クラス テンプレートを使う場合と使わない場合の両方で紹介します。

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

x66s8zcd.alert_note(ja-jp,VS.90).gifメモ :

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

x66s8zcd.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

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

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

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

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

  4. テンプレート ペインの一覧の [COM クラス] を選択し、[追加] をクリックします。Visual Basic によって新しいクラスが追加され、COM 相互運用に新しいプロジェクトが構成されます。

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

  6. [ビルド] メニューの [ClassLibrary1 のビルド] をクリックします。Visual Basic によってアセンブリが作成され、COM オブジェクトが OS に登録されます。

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) を取得するには、Guidgen.exe を起動して Guidgen ユーティリティを開始します。Guidgen アプリケーションによって表示される形式のリストで、[Registry Format] をクリックします。[New GUID] ボタンをクリックして GUID を生成し、[Copy] ボタンをクリックして 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"
    
    x66s8zcd.alert_note(ja-jp,VS.90).gifメモ :

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

  7. ComClass 属性を ComClass1 に追加して、クラス ID、インターフェイス ID、およびイベント ID のグローバル一意識別子 (GUID: global unique identifier) を指定します。次に例を示します。

    <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 オブジェクトが OS に登録されます。

    x66s8zcd.alert_note(ja-jp,VS.90).gifメモ :

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

参照

処理手順

チュートリアル : COM オブジェクトによる継承の実装

相互運用性のトラブルシューティング

参照

ComClassAttribute クラス

#Region ディレクティブ

その他の技術情報

COM 相互運用

.NET Framework アプリケーションにおける COM 相互運用性