String-Parameter in API-Funktionen
Veröffentlicht am 04.03.2005
Access mit API-Funktionen erweitern.
Das Zusammenspiel zwischen String-Parametern in VBA und C ist mit etwas Schwierigkeit verbunden, insbesondere wenn Sie Stringwerte aus dem Windows-API erwarten. Ehe eine API-Funktion eine Zeichenkette von Access modifizieren kann, müssen zwei Bedingungen erfüllt sein:
Der String muß als ByVal-Parameter deklariert werden. Erst wenn Sie den gesamten String-Inhalt, an den ein NULL-Zeichen angehängt ist, an die Funktion übergeben, kann der String bearbeitet werden.
Der String muss lang genug sein, um das Funktionsergebnis unterbringen. Die API-Funktion wird den in Access deklarierten String nicht verlängern!
Das folgende Beispiel ermittelt das Windows Temp-Verzeichnis. Vorher wird der Variable strTempVerz mit 512 NULL-Zeichen initialisiert – normalerweise genügend für einen Pfadnamen. Der String wird außerdem als ByVal-Parameter (lpBuffer in der Deklaration) an die API-Funktion GetTempPath übergeben:
' API-Funktion deklarieren
Declare Function GetTempPath Lib "kernel32" Alias _
"GetTempPathA" (ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
Private Sub btnTempDir_Click()
Dim ret As Long, length As Long, strTempVerz As String
strTempVerz = String$(512, 0) ‘ String mit 512 NULLs initialisieren
length = Len(strTempVerz)
ret = GetTempPath(length, strTempVerz)
If ret <> 0 Then ‘ Länge des zurückgegebenen Pfadnamen
‘ Ergebnis im Textfeld anzeigen (ohne zusätzliche NULLs)
txtTempVerz = Left$(strTempVerz, ret)
Else
Debug.Print "Feher in btnTempDir_Click"
End If
End Sub