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