BEISPIEL
BEISPIEL
HINWEIS
BEISPIEL
BEISPIEL
Kapitel 13: Programmschnittstellen
Die folgende Anweisung arbeitet mit einer Wertübergabe:
Declare Function OpenClipboard Lib "user32" (ByVal Hwnd As Long) As Long
Die folgende Anweisung übergibt einen Zeiger:
Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Ausnahmen bestätigen die Regel – Übergabe von Strings
Bezüglich Variablenübergabe dürfte eigentlich alles klar sein, wären da nicht die Strings.
Strings werden immer mit ByVal übergeben, intern übermittelt Visual Basic aber einen Zeiger auf die Zeichen-
kette. Das ist die berühmte Ausnahme von der Regel!
Der Grund für obige Inkonsequenz ist die Verschiedenheit des in Basic und des in den DLLs verwendeten
C-Stringformates. Während C einen String am Ende mit einem Null-Zeichen begrenzt (nullterminierte
Zeichenkette), verwaltet Access den String in einem eigenen Format (BSTR). Bei der Übergabe konvertiert
Access die Formate automatisch.
Für dieckgabe von Strings aus einer DLL müssen Sie häufig einen Zeiger auf einen Stringpuffer über-
geben. Dieser Puffer wird durch die API-Funktion gefüllt und zurückgegeben. Wie schon erwähnt, ist die-
ser String mit einem Null-Zeichen terminiert.
Mit folgendem Aufruf extrahieren Sie den eigentlichen String aus dem Puffer:
ergebnis = Left$(stringpuffer$, InStr(stringpuffer$,Chr$(0))-1)
In einigen Fällen ist der Rückgabewert der Funktion die Stringlänge.
API-Funktion mit Rückgabewert:
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer$, _
ByVal nSize&) As Long
Obige Anweisung ermittelt das Systemverzeichnis von Windows. Dazu müssen ein Stringpuffer und die ma-
ximale Größe des Puffers übergeben werden:
Function GetSystemDir() As String
Dim s As String, i As Integer
s = Space$(255) ' Puffer mit Leerzeichen füllen
i = GetSystemDirectory(s, 255) ' API-Funktion aufrufen
GetSystemDir = Left$(s, i) ' den String bestimmen
End Function
834

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.