|
Es gibt eine Reihe von API-Funktionen, die eine so genannte
Callback-Adresse benötigen. Das ist die Adresse einer Prozedur bzw.
Funktion in Ihrem Programm, die das Windows-System seinerseits als
Antwort auf den Aufruf einer API-Funktion aufrufen soll. Wird diese
Funktionsadresse direkt als Parameter einer API-Funktion erwartet,
können Sie den Operator AddressOf
zusammen mit dem Namen der Prozedur bzw. Funktion (die immer in
einem Standard-Modul stehen muss) übergeben:
APIFunktion AddressOf MeineProzedur
Manchmal soll jedoch die Funktionsadresse nicht direkt als
Parameter übergeben werden, sondern beispielsweise über ein
Element einer benutzerdefinierten Variablen. Elemente, die eine
Funktionsadresse aufnehmen sollen, sind als Datentyp Long
deklariert. Leider können Sie den Operator AddressOf nur in
Verbindung mit einem Funktionsaufruf verwenden - eine Zuweisung an
eine Variable, oder eben an ein Element einer benutzerdefinierten
Variablen, wird von Visual Basic zurückgewiesen:
Type MeineVariable
' ...
ProcAddress As Long
' ...
End Type
MeineVariable.ProcAddress = AddressOf MeineProzedur
Da es Visual Basic allerdings nicht interessiert, ob die
Parameter-Übergabe an eine API-Funktion erfolgen soll, oder an eine
Funktion in einem VB-Programm, können wir den benötigten Long-Wert
auf einem kleinen Umweg, nämlich über eine Hilfsfunktion erhalten.
Dieser Hilfsfunktion GetAddressOf wird wie von VB erwartet mit dem
Operator AddressOf der Prozedur- bzw. Funktionsname übergeben. Sie
gibt den aus ihrer Sicht eingehenden Long-Wert als Funktionsergebnis
zurück, den Sie dann beliebig verwenden können.
Public Function GetAddressOf(ByVal AddressOfProc As Long) As Long
GetAddressOf = AddressOfProc
End Function
Die benötigte Zuweisung sieht dann so aus:
MeineVariable.ProcAddress = GetAddressOf(AddressOf MeineProzedur)

|