Page 1 sur 1

Comment accéder à un gadget depuis une DLL ?

Publié : jeu. 13/août/2020 20:06
par Shadow
Bonjour,

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

Re: Comment accéder à un gadget depuis une DLL ?

Publié : sam. 15/août/2020 17:57
par Patrick88
bin, ils t'ont répondu, non ?

mk-soft : There you have to deal a little bit with the SDK of Purebasic. Là, il faut s'occuper un peu du SDK de Purebasic.


ShadowStorm Post subject: Access a gadget from a DLL PostPosted: Fri Aug 14, 2020 8:50 am
http://forums.purebasic.com/english/vie ... f06301464e

:roll:

Re: Comment accéder à un gadget depuis une DLL ?

Publié : sam. 15/août/2020 20:15
par Shadow
Exacte la réponses m'as été donné sur le forum anglais :)
https://www.purebasic.fr/english/viewto ... 67ed8cb24d