Functions > Process >


DllCall

Appelle dynamiquement une fonction dans une DLL.

DllCall ( "dll", "return type", "function" [, type1, param1 [, type n, param n]] )

Paramètres

dll Le nom du fichier de la DLL à utiliser, par exemple "user32.dll". Le handle obtenu à partir de DllOpen peut également être utilisé (Voir Remarques).
return type Le type de retour de la fonction (Voir ci-dessous).
function Le nom, par exemple. "MessageBox" ou la valeur ordinale, par exemple 62, de la fonction à appeler dans la DLL.
type1 [optionnel] Le type du paramètre (Voir Remarques).
param1 [optionnel] Le paramètre actuel (Voir Remarques).
type n [optionnel] Le type du n-ième paramètre (Voir Remarques).
param n [optionnel] Le n-ième paramètre actuel (Voir Remarques).

Les types valides sont:
Type Détails
NONE aucune valeur (valable uniquement pour le type de retour - l'équivalent de vide en C)
BYTE 8 bits entiers non signé
BOOLEAN 8 bits entiers non signé
SHORT 16 bits entiers
USHORT 16 bits entiers non signé
WORD 16 bits entiers non signé
INT 32 bits entiers
LONG 32 bits entiers
BOOL 32 bits entiers
UINT 32 bits entiers non signé
ULONG 32 bits entiers non signé
DWORD 32 bits entiers non signé
INT64 64 bits entiers
UINT64 64 bits entiers non signé
PTR un pointeur général (void *)
HWND un handle de fenêtre (pointeur)
HANDLE un handle (pointeur)
FLOAT une simple précision sur la virgule flottante du nombre
DOUBLE une double précision sur la virgule flottante du nombre
INT_PTR, LONG_PTR, LRESULT, LPARAM un entier assez grand pour contenir un pointeur lors de l'exécution sur les 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 sur les versions x86 ou x64 de AutoIt.
STR une chaîne de caractères ANSI (un minimum de 65536 caractères est attribué).
WSTR une chaîne de caractères Unicode large (un minimum de 65 536 caractères est attribué).
STRUCT structure créée avec DllStructCreate()
* Ajouter * à la fin d'un autre type pour le passer par référence. Par exemple "int*" passe un pointeur en type "int".

Conversions des types API Windows en 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 les structures imbriquées à l'intérieur d'une structure, vous devez redéfinir la structure imbriquée. Par exemple, une structure contenant une structure à deux points ("long;long") seraient déclarés comme "long;long;long;long". Les deux premières valeurs de long correspondent à la structure du premier point et les deux autres à la structure du second point.

Pour davantage de types API Windows consultez MSDN.

Valeur de retour

Succès: Retourne un tableau. Voir Remarques.
Échec: Définit @error <> 0.
@error: 1 = impossible d'utiliser le fichier DLL
2 = "type de retour" inconnu
3 = la fonction n'a pas été trouvée dans le fichier DLL
4 = mauvais numéro de paramètres
5 = mauvais paramètre.

Remarques

Si le nom d'un fichier dll est donné, alors la DLL est automatiquement chargée et ensuite fermée à la fin de l'appel. Si vous voulez contrôler manuellement le chargement et le déchargement de la DLL, alors vous devriez utiliser DllOpen() et DllClose() et utiliser un handle à la place d'un nom de fichier dans cette fonction.

Par défaut, AutoIt utilise la méthode d'appel "stdcall". Pour utiliser la méthode "cdecl", placez":cdecl" après le type de retour.
DllCall("SQLite.dll", "int:cdecl", "sqlite3_open", "str", $sDatabase_Filename ", long*", 0).

Par défaut, AutoIt essaie d'utiliser la version ANSI d'un nom de fonction, par exemple MessageBoxA est utilisé quand MessageBox est donné comme nom de fonction. Pour appeler la version unicode, utilisez MessageBoxW.

Si l'appel de la fonction échoue, alors @error est mis à une valeur non nulle.
Sinon, un tableau est retourné qui contient la valeur de retour de fonction et une copie de tous les paramètres (y compris les paramètres que la fonction peut avoir modifié lors du passage par référence).
$return[0] = valeur de retour de la fonction
$return[1] = paramètre 1
$return[2] = paramètre 2
...
$return[n] = paramètre n

En relation

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

Exemples

Exemple 1

; Appel direct de l'API MessageBox.
DllCall("user32.dll", "int", "MessageBox", _
        "hwnd", 0, _ ; Handle de la fenêtre parent
        "str", "Some text", _ ; Le texte de la zone de message
        "str", "Some title", _ ; Le titre de la boîte de message
        "int", 0) ; Flags pour la boîte de message.


Exemple 2

#include <MsgBoxConstants.au3>

; Appel d'une fonction qui modifie les paramètres
Local $iPID = Run("notepad")

Local $hWnd = WinWait("[CLASS:Notepad]", "", 2000)

If $hWnd = 0 Then
    ; Timeout s'est produit.
    Exit MsgBox($MB_SYSTEMMODAL, Default, "Impossible de démarrer le Bloc-notes!")
EndIf

Local $aResult = DllCall("user32.dll", "int", "GetWindowText", "hwnd", $hWnd, "str", "", "int", 32768)
MsgBox($MB_SYSTEMMODAL, Default, "Nombre de caractères retournés: " & $aResult[0])
MsgBox($MB_SYSTEMMODAL, Default, "Texte (retourné dans le paramètre 2): '" & $aResult[2] & "'")

WinClose($hWnd)


Exemple 3

#include <MsgBoxConstants.au3>

; Consulte PickIconDlg Windows.
Local $sFileName = @SystemDir & '\shell32.dll'

; Crée une structure pour stocker l'index de l'icône
Local $tIcon = DllStructCreate("int")
Local $tString = DllStructCreate("wchar[260]")
Local $iStructsize = DllStructGetSize($tString) / 2
DllStructSetData($tString, 1, $sFileName)

; Exécute le PickIconDlg - « 62 » est la valeur ordinale pour cette fonction
DllCall("shell32.dll", "none", 62, _
        "hwnd", 0, _
        "ptr", DllStructGetPtr($tString), _
        "int", $iStructsize, _
        "ptr", DllStructGetPtr($tIcon))

$sFileName = DllStructGetData($tString, 1)
Local $iIconIndex = DllStructGetData($tIcon, 1)

; Consulte le nouveau nom de fichier et l'index de l'icône
MsgBox($MB_SYSTEMMODAL, "Info", "Dernier fichier sélectionné: " & $sFileName & @CRLF & "Icon-Index: " & $iIconIndex)