次の方法で共有


チュートリアル: COM オブジェクトを使用した継承の実装 (Visual Basic)

以前のバージョンの Visual Basic で作成されたものでも、COM オブジェクトの Public クラスから Visual Basic クラスを派生させることができます。 COM オブジェクトから継承されたクラスのプロパティとメソッドは、他の基底クラスのプロパティとメソッドをオーバーライドまたはオーバーロードできるのと同じようにオーバーライドまたはオーバーロードできます。 COM オブジェクトからの継承は、再コンパイルしない既存のクラス ライブラリがある場合に便利です。

次の手順では、Visual Basic 6.0 を使用してクラスを含む COM オブジェクトを作成し、それを基底クラスとして使用する方法を示します。

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

このチュートリアルで使用する COM オブジェクトをビルドするには

  1. Visual Basic 6.0 で、新しい ActiveX DLL プロジェクトを開きます。 Project1という名前のプロジェクトが作成されます。 Class1という名前のクラスがあります。

  2. プロジェクト エクスプローラーで、[Project1] を右クリックし、[Project1 プロパティ] をクリックします。 [ プロジェクトのプロパティ ] ダイアログ ボックスが表示されます。

  3. [プロジェクトのプロパティ] ダイアログ ボックスの [全般] タブで、[プロジェクト名] フィールドに「ComObject1」と入力してプロジェクト名を変更します。

  4. プロジェクト エクスプローラーで、Class1を右クリックし、[プロパティ] をクリックします。 クラスの [プロパティ] ウィンドウが表示されます。

  5. Name プロパティを MathFunctions に変更します。

  6. プロジェクト エクスプローラーで、MathFunctionsを右クリックし、[コードの表示] をクリックします。 コード エディターが表示されます。

  7. プロパティ値を保持するローカル変数を追加します。

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. プロパティ Let と Property Get プロパティ プロシージャを追加します。

    Public Property Let Prop1(ByVal vData As Integer)
       'Used when assigning a value to the property.
       mvarProp1 = vData
    End Property
    Public Property Get Prop1() As Integer
       'Used when retrieving a property's value.
       Prop1 = mvarProp1
    End Property
    
  9. 関数を追加します。

    Function AddNumbers(
       ByVal SomeNumber As Integer,
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. COM オブジェクトを作成して登録するには、[ファイル] メニューの [ComObject1.dllを作成する] をクリックします。

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

相互運用機能アセンブリ

次の手順では、アンマネージ コード (COM オブジェクトなど) と Visual Studio で使用されるマネージド コードの間のブリッジとして機能する相互運用機能アセンブリを作成します。 Visual Basic で作成される相互運用機能アセンブリは、相互運用 マーシャリング、パラメーターのパッケージ化プロセス、COM オブジェクトとの間の移動時に同等のデータ型に値を返すプロセスなど、COM オブジェクトの操作の詳細の多くを処理します。 Visual Basic アプリケーションの参照は、実際の COM オブジェクトではなく相互運用機能アセンブリを指します。

Visual Basic 2005 以降のバージョンで COM オブジェクトを使用するには

  1. 新しい Visual Basic Windows アプリケーション プロジェクトを開きます。

  2. [プロジェクト ] メニューの [参照の追加] クリックします。

    [ 参照の追加 ] ダイアログ ボックスが表示されます。

  3. [COM]タブで、[コンポーネント名]リストのComObject1をダブルクリックし、[OK]をクリックします

  4. [プロジェクト] メニューの [新しい項目の追加] クリックします。

    [ 新しい項目の追加 ] ダイアログ ボックスが表示されます。

  5. [テンプレート] ウィンドウ 、[ クラス] をクリックします。

    既定のファイル名 ( Class1.vb) が [名前 ] フィールドに表示されます。 このフィールドをMathClass.vbに変更し、[ 追加] をクリックします。 これにより、 MathClassという名前のクラスが作成され、そのコードが表示されます。

  6. COM クラスから継承する MathClass の先頭に次のコードを追加します。

    ' The inherited class is called MathFunctions in the base class,
    ' but the interop assembly appends the word Class to the name.
    Inherits ComObject1.MathFunctionsClass
    
  7. 次のコードを MathClassに追加して、基底クラスのパブリック メソッドをオーバーロードします。

    '  This method overloads the method AddNumbers from the base class.
    Overloads Function AddNumbers(
        ByVal SomeNumber As Integer,
        ByVal AnotherNumber As Integer) As Integer
    
        Return SomeNumber + AnotherNumber
    End Function
    
  8. 次のコードを MathClassに追加して、継承されたクラスを拡張します。

    '  The following function extends the inherited class.
    Function SubtractNumbers(
        ByVal SomeNumber As Integer,
        ByVal AnotherNumber As Integer) As Integer
    
        Return AnotherNumber - SomeNumber
    End Function
    

新しいクラスは、COM オブジェクトの基底クラスのプロパティを継承し、メソッドをオーバーロードし、クラスを拡張する新しいメソッドを定義します。

継承されたクラスをテストするには

  1. スタートアップ フォームにボタンを追加し、それをダブルクリックしてコードを表示します。

  2. ボタンの Click イベント ハンドラー プロシージャで、次のコードを追加して MathClass のインスタンスを作成し、オーバーロードされたメソッドを呼び出します。

    Dim Result1 As Short
    Dim Result2 As Integer
    Dim Result3 As Integer
    Dim MathObject As New MathClass
    Result1 = MathObject.AddNumbers(4S, 2S) ' Add two Shorts.
    Result2 = MathObject.AddNumbers(4, 2) 'Add two Integers.
    Result3 = MathObject.SubtractNumbers(2, 4) ' Subtract 2 from 4.
    MathObject.Prop1 = 6 ' Set an inherited property.
    
    MsgBox("Calling the AddNumbers method in the base class " &
           "using Short type numbers 4 and 2 = " & Result1)
    MsgBox("Calling the overloaded AddNumbers method using " &
           "Integer type numbers 4 and 2 = " & Result2)
    MsgBox("Calling the SubtractNumbers method " &
           "subtracting 2 from 4 = " & Result3)
    MsgBox("The value of the inherited property is " &
            MathObject.Prop1)
    
  3. F5 キーを押してプロジェクトを実行します。

フォーム上のボタンをクリックすると、最初に AddNumbers メソッドが Short データ型番号で呼び出され、Visual Basic によって基本クラスから適切なメソッドが選択されます。 AddNumbersの 2 番目の呼び出しは、MathClassからのオーバーロード メソッドに送されます。 3 番目の呼び出しは、クラスを拡張する SubtractNumbers メソッドを呼び出します。 基底クラスのプロパティが設定され、値が表示されます。

次のステップ

オーバーロードされた AddNumbers 関数は、COM オブジェクトの基底クラスから継承されたメソッドと同じデータ型を持っているように見える場合があります。 これは、基底クラス メソッドの引数とパラメーターは Visual Basic 6.0 では 16 ビット整数として定義されていますが、新しいバージョンの Visual Basic では 16 ビット整数として Short 型として公開されるためです。 新しい関数は 32 ビット整数を受け取り、基底クラス関数をオーバーロードします。

COM オブジェクトを使用する場合は、パラメーターのサイズとデータ型を確認してください。 たとえば、引数として Visual Basic 6.0 コレクション オブジェクトを受け取る COM オブジェクトを使用している場合、新しいバージョンの Visual Basic からコレクションを指定することはできません。

COM クラスから継承されたプロパティとメソッドはオーバーライドできます。つまり、基本 COM クラスから継承されたプロパティまたはメソッドを置き換えるローカル プロパティまたはメソッドを宣言できます。 継承された COM プロパティをオーバーライドする規則は、次の例外を除き、他のプロパティとメソッドをオーバーライドする規則と似ています。

  • COM クラスから継承されたプロパティまたはメソッドをオーバーライドする場合は、他のすべての継承されたプロパティとメソッドをオーバーライドする必要があります。

  • ByRef パラメーターを使用するプロパティはオーバーライドできません。

こちらも参照ください