Functions > Process >


DllCallAddress

Appel dynamique d'une fonction à une adresse mémoire spécifique.

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

Paramètres

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).


Les types valides sont:
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".


Conversions des types Windows API vers les types AutoIt:
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

Pour utiliser une structure imbriquée dans une structure, vous devez redéfinir la structure imbriquée. Par exemple, une structure contenant deux structures POINT ("long;long") serait déclaré comme "long;long;long;long". Les deux premières valeurs long correspondent à la première structure POINT et la seconde de deux valeurs correspondent à la seconde structure POINT.

Pour davantage de types de l'API Windows Consultez MSDN .

Valeur de retour

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
See remarks.

Remarques

Par défaut, AutoIt utilise la méthode d'appel 'stdcall'. Pour utiliser la méthode 'cdecl' placer ':cdecl' après le type de retour.
Si l'appel de la fonction échoue alors le flag @error <> 0.
Sinon un tableau est retourné qui contient la valeur de retour de la fonction et une copie de tous les paramètres (y compris les paramètres que la fonction a modifiés lors d'un passage par référence).
$return[0] = valeur de retour de la fonction
$return[1] = param1
$return[2] = param2
...
$return[n] = paramn

Note Spéciale: C'est une fonction avancée. Une utilisation incorrecte de cette fonction peut bloquer AutoIt. Avant d'utiliser cette fonction assurez-vous que DllCall() ne fait pas ce dont vous avez besoin.

En relation

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

Exemple

#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