Die Arbeit mit externen Bibliotheken erweitert die Möglichkeiten von Visual Basic, da sie die Nutzung nicht nur von Standardklassen, sondern auch von Drittanbieter-Komponenten ermöglicht – sowohl .NET-Bibliotheken (DLL) als auch klassische COM-Objekte.
Ursprünglich war VB hauptsächlich auf die Interaktion mit COM-Komponenten (ActiveX, OCX) ausgerichtet, was die Anbindung solcher Bibliotheken über „Project – References“ ermöglichte. Mit dem Erscheinen von VB.NET wurde die Möglichkeit hinzugefügt, auf .NET-Assemblies zu verweisen und externe Methoden einfacher über P/Invoke (Declare) zu nutzen.
Die Hauptschwierigkeit besteht darin, die geeignete Integrationsmethode sorgfältig auszuwählen, um Laufzeitefehler, Kompatibilitätsprobleme und Ressourcenlecks bei der Interaktion mit externem Code zu vermeiden.
In .NET wird für die Verwendung von .NET-Bibliotheken oder registrierten COM-Komponenten Add Reference verwendet, was einen Verweis auf die Assembly hinzufügt; für den Aufruf von Prozeduren aus nativen DLL wird Declare verwendet.
Beispiel für die Verwendung einer .NET-Bibliothek (Add Reference):
' Nach dem Hinzufügen des .NET-Verweises Imports System.IO Dim reader As New StreamReader("file.txt") Dim line As String = reader.ReadLine() reader.Close()
Beispiel für den Aufruf einer Funktion aus WinAPI (Declare):
' Aufruf einer Funktion aus user32.dll (WinAPI) Declare Function MessageBeep Lib "user32" (ByVal wType As Integer) As Boolean Sub TestBeep() MessageBeep(0) End Sub
Wesentliche Merkmale:
Kann die Imports-Anweisung verwendet werden, um Funktionen aus externen DLL zu laden?
Nein, die Imports-Anweisung erleichtert nur den Zugriff auf Namensräume innerhalb der angeschlossenen Assemblies, kann aber nicht für das dynamische Laden von Funktionen aus nativen DLL verwendet werden.
Müssen .NET-Assemblies registriert werden, um sie über Add Reference in VB.NET verwenden zu können?
Nein, .NET-Bibliotheken werden einfach durch das Hinzufügen eines Verweises eingebunden, während die Registrierung über regsvr32 nur für COM-Bibliotheken erforderlich ist.
Kann man über Declare .NET-Methoden einbinden, und nicht nur native Win32-Funktionen?
Nein, Declare wird nur für Funktionen aus normalen (nicht .NET) DLLs angewendet, die stdcall/FARPROC-Funktionen exportieren. .NET-Funktionen werden über Add Reference/Imports aufgerufen.
Ein Entwickler beschloss, eine Drittanbieter-.NET-Bibliothek über Declare zu verwenden, ohne die Dokumentation zu studieren, und erhielt einen Fehler während der Kompilierung.
Vorteile:
Nachteile:
Korrekte Hinzufügung eines .NET-Verweises über Add Reference, gefolgt von der Verwendung von Imports und der Erstellung von Instanzen der benötigten Klassen.
Vorteile:
Nachteile: