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
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 naamClass1
.Klik in Projectverkenner met de rechtermuisknop op Project1 en klik vervolgens op Project1-eigenschappen. Het dialoogvenster Projecteigenschappen wordt weergegeven.
Wijzig op het tabblad Algemeen van het dialoogvenster Projecteigenschappen de projectnaam door het veld Projectnaam te typen
ComObject1
.Klik in Projectverkenner met de rechtermuisknop
Class1
en klik vervolgens op Eigenschappen. Het venster Eigenschappen voor de klasse wordt weergegeven.Wijzig de
Name
eigenschap inMathFunctions
.Klik in Projectverkenner met de rechtermuisknop
MathFunctions
en klik vervolgens op Code weergeven. De code-editor wordt weergegeven.Voeg een lokale variabele toe om de eigenschapswaarde op te geven:
' Local variable to hold property value Private mvarProp1 As Integer
Procedures voor eigenschappen
Let
en eigenschappenGet
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
Een functie toevoegen:
Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer AddNumbers = SomeNumber + AnotherNumber End Function
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
Open een nieuw Visual Basic Windows-toepassingsproject.
Klik in het menu Project op Verwijzing toevoegen.
Het dialoogvenster Verwijzing toevoegen wordt weergegeven.
Dubbelklik op het tabblad COM in de lijst Met onderdeelnamen en klik op OK.
ComObject1
Klik in het menu Project op Nieuw item toevoegen.
Het dialoogvenster Nieuw item toevoegen wordt weergegeven.
Klik in het deelvenster Sjablonen op Klasse.
De standaardbestandsnaam,
Class1.vb
wordt weergegeven in het veld Naam . Wijzig dit veld in MathClass.vb en klik op Toevoegen. Hiermee maakt u een klasse met de naamMathClass
en geeft u de bijbehorende code weer.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
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
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
Voeg een knop toe aan het opstartformulier en dubbelklik erop om de bijbehorende code weer te geven.
Voeg in de gebeurtenis-handlerprocedure van
Click
de knop de volgende code toe om een exemplaar vanMathClass
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)
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.