Appel dynamique d'une fonction à une adresse mémoire spécifique.
DllCallAddress ( "return type", address [, type1, param1 [, type n, param n]] )
return type | Le type de retour de la fonction. |
address | L'adresse de la fonction. Si cette valeur n'est pas valide votre script bloquera! |
type1 | [optional] Le type du paramètre (Voir Remarques). |
param1 | [optional] Ce paramètre (Voir Remarques). |
type n | [optional] Le type du n-ième paramètre (Voir Remarques). |
param n | [optional] Le n-ième paramètre (Voir Remarques). |
Type | Détails |
NONE | aucune valeur (valide seulement pour le type de retour - équivalent à void en C) |
BYTE | un entier 8 bits non signé |
BOOLEAN | un entier 8 bits non signé |
SHORT | un entier 16 bits |
USHORT | un entier 16 bits non signé |
WORD | un entier 16 bits non signé |
INT | un entier 32 bits |
LONG | un entier 32 bits |
BOOL | un entier 32 bits |
UINT | un entier 32 bits non signé |
ULONG | un entier 32 bits non signé |
DWORD | un entier 32 bits non signé |
INT64 | un entier 64 bits |
UINT64 | un entier 64 bits non signé |
PTR | un pointeur général (void *) |
HWND | un handle de fenêtre (pointeur) |
HANDLE | un handle (pointeur) |
FLOAT | un nombre simple précision en virgule flottante |
DOUBLE | un nombre double précision en virgule flottante |
INT_PTR, LONG_PTR, LRESULT, LPARAM | un entier assez grand pour contenir un pointeur lors de l'exécution des versions x86 ou x64 de AutoIt. |
UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM | un entier non signé assez grand pour contenir un pointeur lors de l'exécution des versions x86 ou x64 de AutoIt. |
STR | une chaîne ANSI (un minimum de 65536 caractères sont alloués). |
WSTR | une chaîne de caractères larges UNICODE (un minimum of 65536 caractères sont alloués). |
STRUCT | structure créée avec DllStructCreate() |
* | Ajouter * à la fin d'un autre type pour le passer en référence. Par exemple "int*" passe un pointeur dans un type "int". |
WINDOWS API Type | Type AutoIt |
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 |
Succès: | Retourne un tableau. Voir Remarques. |
Échec: | Définit @error <> 0. |
@error: | 2 = type de retour inconnu, 4 = erreur sur le nombre de paramètres, 5 = erreur sur un paramètre |
DllCall, DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllClose, DllOpen, DllStructCreate, DllStructGetPtr
#include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <WinAPISysWin.au3> #include <WindowsConstants.au3> Example() Func Example() ; Active le mode événement GUI. Opt("GUIOnEventMode", 1) ; Crée une simple GUI. Local $hWnd = GUICreate("Exemple DllCallAddress") ; Crée le gestionnaire de l'événement close. GUISetOnEvent($GUI_EVENT_CLOSE, "OnClose") ; Affiche la GUI. GUISetState(@SW_SHOWNORMAL, $hWnd) ; Obtient un pointeur sur la fenêtre de WindowsProc(). Local $pWndProc = _WinAPI_GetWindowLong($hWnd, $GWL_WNDPROC) ; Indique à l'utilisateur ce qui va se passer. MsgBox($MB_SYSTEMMODAL, "DllCallAddress Example Msg", "Lorsque vous cliquerez sur OK la fenêtre de test se fermera.") ; Explicitement génére un événement WM_CLOSE et le passe directement à WindowProc(). ; Cela ne devrait jamais être fait dans une application réelle (utilisez _SendMessage() à la place), ; mais cela montre comment utiliser la fonction. DllCallAddress("LRESULT", $pWndProc, "HWND", $hWnd, "UINT", $WM_CLOSE, "WPARAM", 0, "LPARAM", 0) EndFunc ;==>Example Func OnClose() GUIDelete(@GUI_WinHandle) MsgBox($MB_SYSTEMMODAL, "DllCallAddress Example Msg", "Evénement Close reçu, la fenêtre de test devrait maintenant se fermer.") EndFunc ;==>OnClose