Werken met externe bibliotheken breidt de mogelijkheden van Visual Basic uit, waardoor je niet alleen standaardklassen, maar ook externe componenten kunt gebruiken - zowel .NET-bibliotheken (DLL) als klassieke COM-objecten.
Oorspronkelijk was VB voornamelijk gericht op interactie met COM-componenten (ActiveX, OCX), waardoor dergelijke bibliotheken konden worden aangesloten via "Project - References". Met de komst van VB.NET kwam de mogelijkheid om naar .NET-assemblies te verwijzen en externe methoden gemakkelijker te gebruiken via P/Invoke (Declare).
De belangrijkste complicatie is de noodzaak om de integratiemethode zorgvuldig te kiezen om runtime-fouten, compatibiliteitsproblemen en resourcelekkages bij interactie met externe code te vermijden.
In .NET gebruiken we Add Reference voor het gebruik van .NET-bibliotheken of geregistreerde COM-componenten; om procedures uit native DLL's aan te roepen gebruiken we Declare.
Voorbeeld van het gebruik van een .NET-bibliotheek (Add Reference):
' Na het toevoegen van een .NET-referentie Imports System.IO Dim reader As New StreamReader("file.txt") Dim line As String = reader.ReadLine() reader.Close()
Voorbeeld van het aanroepen van een functie uit WinAPI (Declare):
' Aanroep van functie uit user32.dll (WinAPI) Declare Function MessageBeep Lib "user32" (ByVal wType As Integer) As Boolean Sub TestBeep() MessageBeep(0) End Sub
Belangrijke kenmerken:
Kan de Imports-constructie worden gebruikt om functies uit externe DLL's te laden?
Nee, de Imports-operator vereenvoudigt alleen de toegang tot namespaces binnen de aangesloten assemblies, maar kan niet worden gebruikt voor dynamisch verbinden van functies uit native DLL's.
Moet je .NET-assemblies registreren voor gebruik via Add Reference in VB.NET?
Nee, .NET-bibliotheken worden eenvoudig verbonden door een referentie toe te voegen, terwijl registratie via regsvr32 alleen nodig is voor COM-bibliotheken.
Kun je via Declare .NET-methoden gebruiken, en niet alleen native Win32-functies?
Nee, Declare wordt alleen toegepast op functies uit gewone (niet .NET) DLL's die stdcall/FARPROC-functies exporteren. .NET-functies worden aangeroepen via Add Reference/Imports.
Een ontwikkelaar besloot een externe .NET-bibliotheek te gebruiken via Declare, zonder de documentatie te bestuderen, en kreeg een fout tijdens de compilatiefase.
Voordelen:
Nadelen:
Correcte toevoeging van een .NET-referentie via Add Reference, vervolgens gebruik van Imports en creatie van instanties van de vereiste klassen.
Voordelen:
Nadelen: