GUIDs per VBA erstellen (64-bit-kompatibel)

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Fehlerhaft markierte API-Deklarationen

Bild 1: Fehlerhaft markierte API-Deklarationen

Access kann ab Version 2010 auch als 64-Bit-Variante installiert werden. Ab Version 2019 ist 64-Bit die Voreinstellung bei der Installation. Wir stellen in dieser Beitragsreihe die Änderungen vor, die für die Verwendung verschiedener oft genutzter VBA-Prozeduren und Komponenten unter der 64-Bit-Version nötig sind. Dabei wollen wir auch dafür sorgen, dass diese unter der 32-Bit-Version von Access älter als 2010 ebenfalls noch laufen. Den Anfang machen wir mit der 64-Bit-Version der in vielen Beispiellösungen verwendeten Funktion zum Ermitteln von GUIDs.

Wenn Sie die alte Version unter Access in der 64-Bit-Version kompilieren wollen, stoßen Sie schnell auf einige der Inkompatibilitäten, und zwar noch vor dem Kompilieren. Die beiden API-Funktionen CoCreateGuid und StringFromGUID2 werden rot angezeigt (siehe Bild 1).

Fehlerhaft markierte API-Deklarationen

Bild 1: Fehlerhaft markierte API-Deklarationen

Damit sich das ändert, fügen Sie zwischen die beiden Schlüsselwörter Declare und Function das Schlüsselwort PtrSafe ein:

Private Declare PtrSafe Function CoCreateGuid  Lib "ole32.dll" (tGUIDStructure As GUID) As Long
Private Declare Function StringFromGUID2 Lib "ole32.dll"  (rGUID As Any, ByVal lpstrClsId As Long,  ByVal cbMax As Long) As Long

Damit entfällt bereits die rote Markierung dieser Funktionsdeklarationen und Sie können den Befehl Debuggen|Kompilieren von aufrufen.

Dieser liefert einen Kompilierfehler für den Aufruf der Funktion StringFromGUID2, wo für den zweiten Parameter eine Typunverträglichkeit angezeigt wird. Dies ändern wir, indem wir den Typ des zweiten Parameters in der Deklaration der API-Funktion StringFromGUID2 von Long in LongPtr ändern:

Private Declare Function StringFromGUID2 Lib "ole32.dll"  (rGUID As Any, ByVal lpstrClsId As LongPtr,  ByVal cbMax As Long) As Long

Danach lässt sich die Funktion kompilieren und wir können diese mit dem folgenden Befehl im Direktbereich des VBA-Editors aufrufen:

Debug.Print CreateGUID
{058FB0DE-A528-41B9-8AE0-F19DA8FD27F6}

Probleme gibt es nun nur noch, wenn Sie diese Funktion in Access-Versionen verwenden, die noch kein VBA 7 enthalten, sondern VBA 6. Dann müssen Sie noch eine Unterscheidung einfügen, die prüft, welche VBA-Version vorliegt und die entsprechende Deklaration der API-Funktionen einsetzt.

Dabei verwenden wir die sogenannten Compiler-Konstanten. Es gibt beispielsweise die Konstanten VBA6 und VBA7. VBA6 liefert den Wert True, wenn VBA 6 verwendet wird. VBA7 liefert den Wert True, wenn VBA 7 zum Einsatz kommt.

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

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar