COM-DLLs mit twinBASIC

Bisher haben wir COM-DLLs entweder mit Visual Studio 6 erstellt oder mit Visual Studio .NET. Mit twinBASIC kommt nun eine weitere Möglichkeit hinzu. twinBASIC ist noch in der Entwicklung, aber Sie können damit durchaus bereits lauffähige COM-DLLs bauen. Dieser Beitrag zeigt, wie Sie das Beispiel-COM-DLL des Entwicklers von twinBASIC, Wayne Philips, verwenden und wie Sie eigene Funktionen hinzufügen.

Vorbereitungen zum Erstellen von COM-DLLs mit twinBASIC

Den Großteil der Vorbereitungen für den Einsatz von twinBASIC haben wir im Beitrag twinBASIC – VB/VBA mit moderner Umgebung (www.access-im-unternehmen.de/1303) beschrieben. Hier erfahren Sie, wie Sie die Entwicklungsumgebung VS Code installieren und die benötigte Erweiterung twinBASIC hinzufügen. Außerdem haben wir dort ein kleines Beispielprojekt demonstriert.

Aktuelle Versionen

Neben der Version, die wir für die Beschreibungen in diesem Beitrag genutzt haben, wird twinBASIC aktuell sehr schnell weiterentwickelt.

Da es für uns Access-Entwickler sehr ungewohnt ist, dass eine Entwicklungsumgebung weiterentwickelt wird (und das auch noch schnell), weisen wir hier explizit darauf hin, dass es aktuelle Versionen und Informationen an folgenden Orten gibt:

  • Die aktuellen Downloads finden Sie unter https://twinbasic.com.
  • Bugs et cetera können Sie hier melden oder auch einsehen: https://github.com/WaynePhillipsEA/twinbasic/issues

Auf https://twinbasic.com finden Sie auch einige Beispiele, unter anderem das hier als Grundlage verwendete Beispiel für eine ActiveX-DLL.

Beispiel herunterladen

Die zum Zeitpunkt der Erstellung dieses Beitrags verwendete Version des Beispiels finden Sie wie gewohnt im Download zu diesem Beitrag, aktuellere Versionen gegebenenfalls unter dem oben genannten Link.

Wenn Sie die Zip-Datei heruntergeladen haben, finden Sie darin zwei Dateien – eine mit der Dateiendung .code-workspace und eine mit der Dateiendung .twinproj. Um das Projekt zu öffnen, klicken Sie doppelt auf die Datei mit der Dateiendung .code-workspace (gegebenenfalls müssen Sie die Dateiendung noch mit dieser Anwendung verknüpfen).

Dies öffnet den Arbeitsbereich, der sowohl das Projekt aus der .twinproj-Datei anzeigt als auch alle notwendigen Einstellungen enthält. Das Ergebnis sieht nach einem Doppelklick auf den Eintrag HelloWorld.twin im Ordner Sources wie in Bild 1 aus.

COM-Add-In-Projekt in VS Code

Bild 1: COM-Add-In-Projekt in VS Code

Wir sehen hier eine Klasse namens MyTestLibrary mit einer einzigen öffentlich deklarierten Funktion namens MultipleByTen.

Projekt erstellen

Wir schauen uns zunächst an, wie wir die COM-DLL zum Laufen bringen. Dazu brauchen Sie lediglich auf die Schaltfläche Build im Bereich TWINBASIC zu klicken.

Dies erzeugt die .dll-Datei im Ordner Build des Projektordners und legt gleichzeitig die benötigten Einträge in der Registry an – dazu später mehr.

COM-DLL einbinden

Wir öffnen eine Access-Datenbank und starten den VBA-Editor. Hier rufen wir mit dem Menü-Eintrag –Extras|Verweise den Verweise-Dialog auf. Dieser bietet unter dem Namen MyTestLibrary project einen neuen Eintrag zum Einbinden der DLL an (siehe Bild 2). Diesen aktivieren wir durch Platzieren eines Hakens im entsprechenden Kontrollkästchen.

Verweis auf die DLL

Bild 2: Verweis auf die DLL

Befehle der COM-DLL ausprobieren

Danach können Sie im VBA-Editor folgende Prozedur anlegen:

Public Sub TestCOMDLL()
     Dim obj As MyTestLibrary
     Set obj = New MyTestLibrary
     Debug.Print obj.MultiplyByTen(10)
End Sub

Rufen Sie die Prozedur auf, liefert diese mit dem Wert 100 das korrekte Ergebnis. Auch IntelliSense funktioniert sehr gut mit der Funktion (siehe Bild 3).

IntelliSense mit der COM-DLL

Bild 3: IntelliSense mit der COM-DLL

Late Binding

Das Erstellen funktioniert auch mit Late Binding. Allerdings müssen Sie die Bibliothek zusätzlich zur Klasse angeben. Das sieht dann beispielsweise wie folgt aus:

Public Sub TestCOMDLL1()
     Dim obj As Object
     Set obj = CreateObject( "MyTestLibraryProject.MyTestLibrary")
     Debug.Print obj.MultiplyByTen(10)
End Sub

Geben Sie die Bibliothek nicht an, führt dies zu dem Fehler aus Bild 4.

Fehler beim Versuch, die Klasse per Late Binding zu nutzen

Bild 4: Fehler beim Versuch, die Klasse per Late Binding zu nutzen

Registrierung der COM-DLL

Die Registrierung der COM-DLL erfolgt beim Build-Vorgang. Diese Information erhalten Sie, wenn Sie sich das Debug-Fenster von VS Code ansehen (siehe Bild 5). Diesen Bereich aktivieren Sie mit dem Menüpunkt Anzeigen|Debugging-Konsole.

Ausgabe beim Build-Vorgang

Bild 5: Ausgabe beim Build-Vorgang

Sie können dazu nicht die übliche Anweisung Regexp32.exe verwenden, mit der normalerweise DLLs registriert werden.

Somit steht auch der Befehl Regexp32.exe -u nicht zur Verfügung, mit dem Sie auf diese Weise registrierte DLLs normalerweise wieder deregistrieren können.

Einstellungen für das Projekt

Wenn Sie doppelt auf den Eintrag Settings des Explorers klicken, erscheint der Bereich mit den Einstellungen. Dieser zeigt im oberen Teil den Namen des Projekts sowie die Verweise an (siehe Bild 6).

Einstellungen des Projekts

Bild 6: Einstellungen des Projekts

Hier ist die Beschreibung einiger der Einstellungen:

  • Project: Name: Name des Projekts. Dieser wird beispielsweise im Dateinamen der zu erstellenden DLL-Datei verwendet, wenn Sie den weiter unten beschriebenen Platzhalter ProjectName verwenden.
  • COM Type Library/ActiveX References: Liste der Verweise, die in dieser EXE oder DLL verwendet werden sollen.
  • Project: GUID: GUID, die beispielsweise in der Registry für das Projekt verwendet wird.
  • Project: Build Output Path: Gibt den Pfad an, unter dem die EXE- oder DLL-Datei erstellt werden soll. Sie können hier Platzhalter wie {SourcePath}, {ProjectName}, {ProjectID}, {Architecture} oder {FileExtension} verwenden.
  • Project: Build Type: Gibt an, ob eine ActiveX DLL erstellt werden soll oder eine Standard EXE.
  • Project: Run After Build: Nur für EXEs. Gibt an, ob diese direkt nach dem Erstellen ausgeführt werden soll.
  • Project: Description: Text, der im Verweise-Dialog angezeigt wird, wenn Sie diese DLL in ein Projekt einbinden wollen.

Verweise auf andere Bibliotheken nutzen

Wie Sie oben gesehen haben, können Sie über den Bereich COM Type Library/ActiveX References externe Bibliotheken per Verweis einbinden. Das wollen wir nun nutzen, um beispielsweise eine Bibliothek für den Datenzugriff in einer Funktion verfügbar zu machen.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar