Utilisation de DLL
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 :
Nous allons à présent retrouver le handle de notre fenêtre DB :
Code :
Regardons à présent la fonction MessageBoxA de la DLL :
Code :
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 :
Voici la fonction win32dlg qui regroupe ce que nous venons de voir :
Code :
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 :
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 :
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 resultVous 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




