GetProcAddress: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
Zeile 2: Zeile 2:
 
GetProcAddress gibt die Adresse einer von einem im eigenen Prozess liegenden Modul exportierten Funktion zurück.
 
GetProcAddress gibt die Adresse einer von einem im eigenen Prozess liegenden Modul exportierten Funktion zurück.
  
<syntaxhighlight lang="vb">Declare Function GetProcAddress Lib "kernel32.dll" ( _
+
<syntaxhighlight lang="<syntaxhighlight lang="vb">">Declare Function GetProcAddress Lib "kernel32.dll" ( _
 
                 ByVal hModule As Long, _
 
                 ByVal hModule As Long, _
 
                 ByVal strProcName As String) As Long
 
                 ByVal strProcName As String) As Long
Zeile 23: Zeile 23:
 
==Beispiel==
 
==Beispiel==
  
<syntaxhighlight lang="vb">Dim lngMsgBoxAddr As Long
+
<syntaxhighlight lang="<syntaxhighlight lang="vb">">Dim lngMsgBoxAddr As Long
 
Dim hUser32 As Long
 
Dim hUser32 As Long
  
Zeile 33: Zeile 33:
  
 
Um die ermittelte Funktion aus Visual Basic aufzurufen, sind weitere API-Aufrufe von Nöten. Relativ einfach geht es noch, wenn die Funktion genau vier Argumente mit dem Datentyp Long erwartet, da sich dann [[CallWindowProc]] zum Aufruf zweckentfremden lässt:
 
Um die ermittelte Funktion aus Visual Basic aufzurufen, sind weitere API-Aufrufe von Nöten. Relativ einfach geht es noch, wenn die Funktion genau vier Argumente mit dem Datentyp Long erwartet, da sich dann [[CallWindowProc]] zum Aufruf zweckentfremden lässt:
<syntaxhighlight lang="vb">
+
<syntaxhighlight lang="<syntaxhighlight lang="vb">">
 
Result = CallWindowProc(hFunction, Argument1, Argument2, Argument3, Argument4)
 
Result = CallWindowProc(hFunction, Argument1, Argument2, Argument3, Argument4)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Falls die Anzahl der Argumente abweicht, wird es um einiges komplizierter. [http://www.activevb.de/tipps/vb6tipps/tipp0692.html Tipp 692] zeigt, wie eine Funktion mit beliebig vielen Argumenten aufgerufen werden kann.
+
Falls die Anzahl der Argumente abweicht, wird es um einiges komplizierter. [http://www.active<syntaxhighlight lang="vb">.de/tipps/<syntaxhighlight lang="vb">6tipps/tipp0692.html Tipp 692] zeigt, wie eine Funktion mit beliebig vielen Argumenten aufgerufen werden kann.
  
 
==Betriebssysteme==
 
==Betriebssysteme==

Version vom 5. November 2016, 23:10 Uhr

GetProcAddress gibt die Adresse einer von einem im eigenen Prozess liegenden Modul exportierten Funktion zurück.

">Declare Function GetProcAddress Lib "kernel32.dll" ( _
                 ByVal hModule As Long, _
                 ByVal strProcName As String) As Long

Parameter

hModule

Handle zum jeweiligen Modul. Dieses Handle kann zum Beispiel über LoadLibrary oder GetModuleHandle bezogen werden.

strProcName

Name der gesuchten Funktion.

Rückgabe

Die Funktion gibt bei Erfolg die Adresse der Funktion, den Wert 0 bei Misserfolg zurück. In diesem Fall können weitere Fehlerinformationen mit Err.LastDLLError ausgelesen werden.

Beispiel

">Dim lngMsgBoxAddr As Long
Dim hUser32 As Long

hUser32 = GetModuleHandle("user32.dll")
lngMsgBoxAddr = GetProcAddress(hUser32, "MessageBoxA")

Hinweise

Um die ermittelte Funktion aus Visual Basic aufzurufen, sind weitere API-Aufrufe von Nöten. Relativ einfach geht es noch, wenn die Funktion genau vier Argumente mit dem Datentyp Long erwartet, da sich dann CallWindowProc zum Aufruf zweckentfremden lässt:

">
Result = CallWindowProc(hFunction, Argument1, Argument2, Argument3, Argument4)

Falls die Anzahl der Argumente abweicht, wird es um einiges komplizierter. <syntaxhighlight lang="vb">.de/tipps/<syntaxhighlight lang="vb">6tipps/tipp0692.html Tipp 692 zeigt, wie eine Funktion mit beliebig vielen Argumenten aufgerufen werden kann.

Betriebssysteme

  • Windows 95 / 98 / Me
  • Windows NT 4.0 / 2000 / XP
  • Windows Vista

Verweise

MSDN US-Libary - GetProcAdress

Quelle

MSDN US-Libary