Accueil Articles Tutoriels Forums
Utilisation de DLL
Créé par Mod le 18 Nov 2007 à 15:24, dernière modification le 05 Jan 2008 à 10:12
Tutorial original écrit par Steph Osy

Dans ce tutorial, nous verrons comment appeler une DLL depuis DarkBasic pour perfectionner vos applications. L'exemple utilise les boîtes de dialogue de l'API Windows (user32.dll), vous n'aurez donc rien à installer ou télécharger.
Pour afficher cette boîte de dialogue, deux fonctions de la DLL nous seront utiles : "GetActiveWindow" qui nous permet de connaitre le handle (identifiant) de la fenêtre active et "MessageBoxA" qui permet d'afficher la boîte de dialogue même.

Nous devrons en premier lieu charger la DLL via la commande "load dll <non de la dll> <id (numero unique)>" :
Code :
if dll exist(1)=1 then delete dll 1 ` si la dll 1 existe on la supprime
load dll "user32.dll",1 ` on charge la dll user32.dll et on lui attribue lui numero 1


Nous allons à présent retrouver le handle de notre fenêtre DB :
Code :
hwnd = call dll(1,"GetActiveWindow")


Regardons à présent la fonction MessageBoxA de la DLL :
Code :
int MessageBoxA (hWnd, lpText, lpCaption, uType);


hwnd est le handle de la fenêtre.
lptext est le texte contenue dans la boite de dialogue.
lpcaption est le titre de la boite de dialogue.
uType est le type de boite de dialogue.

La fonction retourne un integer contenant le numéro du bouton cliqué.

uType peut avoir les valeurs suivantes :

  • uType = 0 - OK retourne 1

  • uType = 1 - OK retourne 1 ANNULER retourne 2

  • uType = 2 - ABANDONNER retourne 3 RECOMMENCER retourne 4 IGNORER retourne 5

  • uType = 3 - OUI retourne 6 NON retourne 7 ANNULER retourne 2

  • uType = 4 - OUI retourne 6 NON retourne 7

  • uType = 5 - RECOMMENCER retourne 4 ANNULER retourne 2

  • uType = 5 - ANNULER retourne 2 RECOMMENCER retourne 10 CONTINUER retourne 11


  • Pour appeller cette fonction nous allons utiliser "call dll" :

    Code :
    result = call dll(1, "MessageBoxA", hwnd, mes$, titre$,t)


    Voici la fonction win32dlg qui regroupe ce que nous venons de voir :

    Code :
    function win32dlg(mes$,titre$,t as integer)
        rem ***** type de 0 à 6 *****
        rem t =0 OK retourne 1
        rem t = 1 OK retourne 1 ANNULER retourne 2
        rem t = 2 ABANDONNER retourne 3 RECOMMENCER retourne 4 IGNORER retourne 5
        rem t = 3 OUI retourne 6 NON retourne 7 ANNULER retourne 2
        rem t = 4 OUI retourne 6 NON retourne 7
        rem t = 5 RECOMMENCER retourne 4 ANNULER retourne 2
        rem t = 5 ANNULER retourne 2 RECOMMENCER retourne 10 CONTINUER retourne 11
    
        if t <0 || t>6 then t=0
        if dll exist(1)=1 then delete dll 1
    
        load dll "user32.dll",1
        hwnd = call dll(1 ,"GetActiveWindow")
        result = call dll(1, "MessageBoxA", hwnd, mes$, titre$,t)
        DELETE DLL 1 `destruction de la DLL
    
    endfunction result


    Vous pouvez utiliser cet exemple pour voir le résultat (cliquez avec le bouton droit de la souris pour faire apparaître la boîte de dialogue) :

    Code :
    do
    if mouseclick()=2 then print win32dlg("Ceci est un test.","Ma boîte",0)
    loop
    
    function win32dlg(mes$,titre$,t as integer)
        if t <0 || t>6 then t=0
        if dll exist(1)=1 then delete dll 1
    
        load dll "user32.dll",1
        hwnd = call dll(1, "GetActiveWindow")
        result = call dll(1, "MessageBoxA", hwnd, mes$, titre$,t)
        DELETE DLL 1
    
    endfunction result