Savez-vous comment je peux accéder à un gadget depuis un DLL ?
Dans ce code d'exemple, j'essais de redimensionner un gadget depuis la DLL, c'est un exemple.
Je n'y arrive pas !
Code : Tout sélectionner
; Cet exemple qui vient de l'aide de PureBasic, est un squelette modifié pour construire facilement une DLL en utilisant PureBasic.
; Règles à suivre:
; - Dans la DLL, ne jamais écrire de code en dehors d'une procédure, sauf pour les variables ou les déclarations de Structures.
; - Les routines DirectX Init ne doivent pas être initialisées dans la Procédure AttachProcess()
;
; Il y a 4 procédures appelées automatiquement: AttachProcess(), DetachProcess(), AttachThread() et DetachThread().
; Si vous ne les utiliser pas, il suffit de les enlever.
#TESTDLL = 0 ; 0 Pour compiler le programme en "Shared DLL", 1 pour tester le programme.
CompilerIf #TESTDLL = 0
;{ Le code de la DLL:
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
; Ces 4 procédures qui suivent, sont spécifiques à Windows.
; Cette procédure est appelée une fois, lorsque le programme charge la bibliothèque pour la première fois.
; Toutes les opérations d'init peuvent être effectuées ici (mais pas l'init de DirectX).
ProcedureDLL AttachProcess(Instance)
EndProcedure
; Appelé lorsque le programme libère la DLL.
ProcedureDLL DetachProcess(Instance)
EndProcedure
; Ces deux dernières, sont appelés lorsqu'un thread dans un programme appelle ou libère la DLL.
; Atache un Thread à la DLL.
ProcedureDLL AttachThread(Instance)
EndProcedure
; Libère le Thread de la DLL.
ProcedureDLL DetachThread(Instance)
EndProcedure
CompilerEndIf
; Votre code de la DLL est ici.
Enumeration
#Window
EndEnumeration
ProcedureDLL GadgetResize(*Gadget, X.i, Y.i, W.i, H.i)
ResizeGadget(*Gadget, X.i, Y.i, W.i, H.i)
MessageRequester("Info", Str(*Gadget) + ", " + Str(X.i) + ", " + Str(Y.i) + ", " + Str(W.i) + ", " + Str(H.i), 64)
ProcedureReturn 1
EndProcedure
;}
CompilerElse
If OpenLibrary(0, "Test Dll.dll") Or OpenLibrary(0, "PureBasic.so")
If OpenWindow(NumeroFenetre.i, 0, 0, 220, 100, "Maou, #PB_Window_SystemMenu | #PB_Window_ScreenCentered")
ButtonGadget(1, 10, 60, 200, 30, "Fermer")
*G = GadgetID(1)
MessageRequester("Result", Str(CallFunction(0, "GadgetResize", *G, 20, 40, 280, 50)), 64)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
CloseWindow(NumeroFenetre.i)
Event = #PB_Event_CloseWindow
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Else
MessageRequester("Erreur !", "Ne peux pas ouvrir la fenêtre !", 64)
EndIf
EndIf
CompilerEndIf