Overzicht: Overname implementeren met COM-objecten (Visual Basic)

U kunt Visual Basic-klassen afleiden uit Public klassen in COM-objecten, zelfs die zijn gemaakt in eerdere versies van Visual Basic. De eigenschappen en methoden van klassen die worden overgenomen van COM-objecten kunnen worden overschreven of overbelast, net zoals eigenschappen en methoden van elke andere basisklasse kunnen worden overschreven of overbelast. Overname van COM-objecten is handig wanneer u een bestaande klassebibliotheek hebt die u niet opnieuw wilt compileren.

In de volgende procedure ziet u hoe u Visual Basic 6.0 gebruikt om een COM-object te maken dat een klasse bevat en vervolgens als basisklasse te gebruiken.

Notitie

Mogelijk worden op uw computer verschillende namen of locaties weergegeven voor sommige elementen van de Visual Studio-gebruikersinterface in de volgende instructies. De Visual Studio-editie die u hebt en de instellingen die u gebruikt, bepalen deze elementen. Zie Personalizing the IDE (Personalizing the IDE) voor meer informatie.

Het COM-object bouwen dat in dit scenario wordt gebruikt

  1. Open in Visual Basic 6.0 een nieuw ActiveX DLL-project. Er wordt een project met de naam Project1 gemaakt. Het heeft een klasse met de naam Class1.

  2. Klik in Projectverkenner met de rechtermuisknop op Project1 en klik vervolgens op Project1-eigenschappen. Het dialoogvenster Projecteigenschappen wordt weergegeven.

  3. Wijzig op het tabblad Algemeen van het dialoogvenster Projecteigenschappen de projectnaam door het veld Projectnaam te typenComObject1.

  4. Klik in Projectverkenner met de rechtermuisknop Class1en klik vervolgens op Eigenschappen. Het venster Eigenschappen voor de klasse wordt weergegeven.

  5. Wijzig de Name eigenschap in MathFunctions.

  6. Klik in Projectverkenner met de rechtermuisknop MathFunctionsen klik vervolgens op Code weergeven. De code-editor wordt weergegeven.

  7. Voeg een lokale variabele toe om de eigenschapswaarde op te geven:

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. Procedures voor eigenschappen Let en eigenschappen Get toevoegen:

    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. Een functie toevoegen:

    Function AddNumbers(
       ByVal SomeNumber As Integer,
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. Maak en registreer het COM-object door te klikken op Make ComObject1.dll in het menu Bestand .

    Notitie

    Hoewel u ook een klasse die is gemaakt met Visual Basic als com-object kunt weergeven, is het geen echt COM-object en kan deze niet worden gebruikt in dit scenario. Zie COM-interoperabiliteit in .NET Framework-toepassingen voor meer informatie.

Interop-assembly's

In de volgende procedure maakt u een interoperabiliteitsassembly, die fungeert als een brug tussen niet-beheerde code (zoals een COM-object) en de beheerde code die Visual Studio gebruikt. De interoperabiliteit die Visual Basic maakt, verwerkt veel van de details van het werken met COM-objecten, zoals interop marshalling, het proces van het verpakken van parameters en het retourneren van waarden in gelijkwaardige gegevenstypen wanneer ze worden verplaatst naar en van COM-objecten. De verwijzing in de Visual Basic-toepassing verwijst naar de interop-assembly, niet naar het daadwerkelijke COM-object.

Een COM-object gebruiken met Visual Basic 2005 en nieuwere versies

  1. Open een nieuw Visual Basic Windows-toepassingsproject.

  2. Klik in het menu Project op Verwijzing toevoegen.

    Het dialoogvenster Verwijzing toevoegen wordt weergegeven.

  3. Dubbelklik op het tabblad COM in de lijst Met onderdeelnamen en klik op OK.ComObject1

  4. Klik in het menu Project op Nieuw item toevoegen.

    Het dialoogvenster Nieuw item toevoegen wordt weergegeven.

  5. Klik in het deelvenster Sjablonen op Klasse.

    De standaardbestandsnaam, Class1.vbwordt weergegeven in het veld Naam . Wijzig dit veld in MathClass.vb en klik op Toevoegen. Hiermee maakt u een klasse met de naam MathClassen geeft u de bijbehorende code weer.

  6. Voeg de volgende code toe aan het begin van het overnemen van MathClass de COM-klasse.

    ' 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. Overbelast de openbare methode van de basisklasse door de volgende code toe te voegen aan 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. Breid de overgenomen klasse uit door de volgende code toe te voegen aan 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
    

De nieuwe klasse neemt de eigenschappen van de basisklasse in het COM-object over, overbelastt een methode en definieert een nieuwe methode om de klasse uit te breiden.

De overgenomen klasse testen

  1. Voeg een knop toe aan het opstartformulier en dubbelklik erop om de bijbehorende code weer te geven.

  2. Voeg in de gebeurtenis-handlerprocedure van Click de knop de volgende code toe om een exemplaar van MathClass de overbelaste methoden te maken en aan te roepen:

    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. Voer het project uit door op F5 te drukken.

Wanneer u op de knop in het formulier klikt, wordt de AddNumbers methode eerst aangeroepen met Short gegevenstypenummers en kiest Visual Basic de juiste methode uit de basisklasse. De tweede aanroep wordt AddNumbers omgeleid naar de overbelastingsmethode van MathClass. Met de derde aanroep wordt de SubtractNumbers methode aangeroepen, waarmee de klasse wordt uitgebreid. De eigenschap in de basisklasse is ingesteld en de waarde wordt weergegeven.

Volgende stappen

Mogelijk hebt u gemerkt dat de overbelaste AddNumbers functie hetzelfde gegevenstype heeft als de methode die is overgenomen van de basisklasse van het COM-object. Dit komt doordat de argumenten en parameters van de basisklassemethode zijn gedefinieerd als 16-bits gehele getallen in Visual Basic 6.0, maar ze worden weergegeven als 16-bits gehele getallen van het type Short in latere versies van Visual Basic. De nieuwe functie accepteert 32-bits gehele getallen en overbelastt de basisklassefunctie.

Zorg ervoor dat u bij het werken met COM-objecten de grootte en gegevenstypen van parameters controleert. Als u bijvoorbeeld een COM-object gebruikt dat een Visual Basic 6.0-verzamelingsobject accepteert als argument, kunt u geen verzameling opgeven uit een latere versie van Visual Basic.

Eigenschappen en methoden die worden overgenomen van COM-klassen kunnen worden overschreven. Dit betekent dat u een lokale eigenschap of methode kunt declareren die een eigenschap of methode vervangt die is overgenomen van een com-basisklasse. De regels voor het overschrijven van overgenomen COM-eigenschappen zijn vergelijkbaar met de regels voor het overschrijven van andere eigenschappen en methoden met de volgende uitzonderingen:

  • Als u een eigenschap of methode overschrijft die is overgenomen van een COM-klasse, moet u alle andere overgenomen eigenschappen en methoden overschrijven.

  • Eigenschappen die parameters gebruiken ByRef , kunnen niet worden overschreven.

Zie ook