Ruft eine Funktion an einer bestimmten Speicheradresse dynamisch auf.
DllCallAddress ( "return type", address [, type1, param1 [, type n, param n]] )
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). |
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. |
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 |
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 |
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
DllCall, DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllClose, DllOpen, DllStructCreate, DllStructGetPtr
#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