Funktionreferenz


DllCallAddress

Beschreibung anzeigen in

Ruft eine Funktion an einer bestimmten Speicheradresse dynamisch auf.

DllCallAddress ( "return type", address [, type1, param1 [, type n, param n]] )

Parameter

return type Der Rückgabetyp der Funktion (siehe unten).
address Die Adresse einer Funktion. Wenn dieser Wert ungültig ist, wird das AutoIt abstürzen!
type1 [optional] Der Typ des ersten Parameters (siehe Bemerkungen).
param1 [optional] Der eigentliche erste Parameter (siehe Bemerkungen).
type n [optional] Der Typ des n-ten Parameters (siehe Bemerkungen).
param n [optional] Der eigentliche n-te Parameter (siehe Bemerkungen).
Gültige Typen sind:

Typ Details
NONE ohne Wert (nur als Rückgabewert zulässig - entspricht dem void in C)
BYTE 8Bit Integer vorzeichenlos
BOOLEAN 8Bit Integer vorzeichenlos
SHORT 16Bit Integer mit Vorzeichen
USHORT 16Bit Integer vorzeichenlos
WORD 16Bit Integer vorzeichenlos
INT 32Bit Integer mit Vorzeichen
LONG 32Bit Integer mit Vorzeichen
BOOL 32Bit Integer mit Vorzeichen
UINT 32Bit Integer vorzeichenlos
ULONG 32Bit Integer vorzeichenlos
DWORD 32Bit Integer vorzeichenlos
INT64 64Bit Integer mit Vorzeichen
UINT64 64Bit Integer vorzeichenlos
PTR allgemeiner Zeiger (pointer), (void *)
HWND Fensterhandle (Zeiger)
FLOAT Gleitkommazahl, einfache Genauigkeit
DOUBLE Gleitkommazahl, doppelte Genauigkeit
INT_PTR, LONG_PTR, LRESULT, LPARAM Integerwert, der groß genug ist, einen Zeiger aufzunehmen, abhängig von der AutoIt-Version (x86 oder x64)
UINT_PTR, LONG_PTR, LRESULT, LPARAM vorzeichenloser Integerwert, der groß genug ist, einen Zeiger aufzunehmen, abhängig von der AutoIt-Version (x86 oder x64)
STR ANSI-String (maximal 65536 Zeichen)
WSTR UNICODE-Wide-String (Umwandlung von/nach ANSI-String während des Aufrufs, wenn notwendig), maximal 65536 Zeichen
STRUCT Struktur erstellt durch DllStructCreate()
* Hänge * an das Ende eines anderen Typs an, um ihn als Referenz zu übergeben. Zum Beispiel übergibt "int*" einen Zeiger auf einen "int"-Typ.

Umwandlungen von Windows API Typen zu AutoIt Typen:

WINDOWS API Typ AutoIt Typ
LPCSTR/LPSTR STR
LPCWSTR/LPWSTR WSTR
LPVOID PTR
LPxyz xyz*
HINSTANCE HANDLE
HRESULT LONG
LONGLONG/LARGE_INTEGER INT64
ULONGLONG/ULARGE_INTEGER UINT64
SIZE_T ULONG_PTR
Um verschachtelte Strukturen innerhalb einer Struktur zu verwenden muss zuerst die verschachtelte Struktur neu definiert werden. Zum Beispiel würde eine Struktur die 2 POINT Strukturen ("long;long") enthält, als "long;long;long;long" deklariert werden. Die ersten zwei long Werte beziehen sich auf die erste POINT Struktur und die letzten zwei long Werte beziehen sich auf die zweite POINT Struktur.

Für weitere Windows API Typen siehe MSDN.

Rückgabewert

Erfolg: ein Array. Siehe Anmerkungen.
Fehler: Setzt das @error Flag auf ungleich null.
@error: 2 = unbekannter "Rückgabetyp",
4 = falsche Anzahl von Parametern,
5 = falscher Parameter

Bemerkungen

Standardmäßig, benutzt AutoIt die 'stdcall' Aufrufmethode. Um die 'cdecl' Methode zu benutzen muss ein ':cdecl' nach dem Rückgabetyp angegeben werden.

Falls die Funktion fehlschlägt, wird @error auf ungleich 0 gesetzt.
Andernfalls wird ein Array zurückgegeben, dass den Rückgabewert der Funktion zusammen mit einer Kopie aller Parameter (inklusive der Parameter die die Funktion möglicherweise verändert hat wenn sie via Referenz übergeben wurden).
$return[0] = Rückgabewert der Funktion
$return[1] = param1
$return[2] = param2
...
$return[n] = paramn

Anmerkung: Dies ist eine fortgeschrittene Funktion. Falsche Benutzung dieser Funktion kann AutoIt zum Absturz bringen. Bevor diese Funktion verwendet wird sollte sicher sein, dass DllCall() nicht den gewünschten Zweck erfüllt.

Verwandte Funktionen

DllCall, DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllClose, DllOpen, DllStructCreate, DllStructGetPtr

Beispiel

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>

Example()

Func Example()
    ; Aktiviert den Gui OnEvent Mode
    Opt("GUIOnEventMode", 1)

    ; Erstellt eine einfache Gui
    Local $hWnd = GUICreate("DllCallAddress Beispiel")

    ; Beim schliessen des Fensters, OnClose aufrufen
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnClose")

    ; Zeigt die Gui
    GUISetState(@SW_SHOWNORMAL, $hWnd)

    ; Holt den Pointer zur Windows-Funktion WindowProc().
    Local $pWndProc = _WinAPI_GetWindowLong($hWnd, $GWL_WNDPROC)

    ; Teilt dem User mit was passieren wird
    MsgBox($MB_SYSTEMMODAL, "DllCallAddress Beispiel Nachricht", "Wenn auf OK geklickt wird, wird das Fenster geschlossen.")

    ; Explizit wird ein WM_CLOSE Event generiert und direkt zur WindowProc() weitergegeben.
    ; Das sollte in keiner echten Applikation so sein (lieber _SendMessage() nutzen) aber
    ; es demonstriert wie man die Funktion nutzt

    DllCallAddress("LRESULT", $pWndProc, "HWND", $hWnd, "UINT", $WM_CLOSE, "WPARAM", 0, "LPARAM", 0)
EndFunc   ;==>Example

Func OnClose()
    GUIDelete(@GUI_WinHandle)
    MsgBox($MB_SYSTEMMODAL, "DllCallAddress Beispiel Nachricht", "Schliess-Event empfangen. Das Test-Fenster sollte jetzt geschlossen sein")
EndFunc   ;==>OnClose