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)