Ou mettre ce code dans une DLL ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Ou mettre ce code dans une DLL ?

Message par Ulix »

boujour a tous !


Voici un bout de code, il a pour but de déclare une variable global dans une DLL.
En effet les images et les icones sont commume a de nombreuses DLL !

Code : Tout sélectionner

Global Dim Image(20)
UsePNGImageDecoder()
Image(1)=CatchImage(#PB_Any, ?Printer1)
Image(2)=CatchImage(#PB_Any, ?Printer2)
Image(3)=CatchImage(#PB_Any, ?Printer3)
Image(4)=CatchImage(#PB_Any, ?Printer4)
Image(5)=CatchImage(#PB_Any, ?Printer5)
 
Image(11)=CatchImage(#PB_Any, ?ImageNoir)
Image(12)=CatchImage(#PB_Any, ?ImageCouleur)
Puis les labels pour les includes,

Code : Tout sélectionner

Printer1: IncludeBinary "C:\Basic\Projet\Imprimante\print1.ico"
Printer2: IncludeBinary "C:\Basic\Projet\Imprimante\print2.ico"
Printer3: IncludeBinary "C:\Basic\Projet\Imprimante\print3.ico"
Printer4: IncludeBinary "C:\Basic\Projet\Imprimante\print4.ico"
Printer5: IncludeBinary "C:\Basic\Projet\Imprimante\print5.ico"

ImageCouleur: 	IncludeBinary "C:\Basic\Projet\Imprimante\image1.png"
ImageNoir: 	IncludeBinary "C:\Basic\Projet\Imprimante\image5.png"
...


Selon l'aide il ne doit y avoir aucun code en dehors des procedures.

Comment donc et où mettre mon code ? :?:

Si quelqu'un a déjà surmonter ce problême, un conseil serait un bien venu !
Merci d'avance. :lol:
meganet
Messages : 317
Inscription : jeu. 20/janv./2005 22:00

Si ça marche.

Message par meganet »

Il y à quelque temp, j'avais fait un teste, essaye de mettre un messagerequester() par example en dehor d'une procedure dans une dll, fait un programme pour charger la dll, et tu vera que le code qui est endehor d'une procedure dans une dll, est exécuté à son chargement.
Donc je pence que ton code pourrais marcher.
En revanche, il me semble que ton tableau en global, ne cera valable que dans ta dll.
Ce qui est déclarer en global dans une dll est accéssible que dans cette dll il me semble (à confirmer).
Voilà @+++.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

il faut absolument mettre le code dans un Procedure/ProcedureDLL/ProcedureCDLL ou dans AttachProcess(Instance)

tu fais un truc dans le genre :

Code : Tout sélectionner

Global Dim icone(10)

ProcedureDLL AttachProcess(Instance)
  
  icone(0) = CatchImage(#PB_Any, ?icon0)
  icone(1) = CatchImage(#PB_Any, ?icon1)
  
  MessageRequester("DLL","Ressources allouées !")
  MessageRequester("DLL",Hex(icone(0)))
  MessageRequester("DLL",Hex(icone(1)))
  
EndProcedure

ProcedureDLL DetachProcess(Instance)
  
  For i = 0 To 10
    If IsImage(icone(i))
      FreeImage(icone(i))
    EndIf
  Next
  
EndProcedure

DataSection
  icon0: IncludeBinary "icon0.bmp"
  icon1: IncludeBinary "icon1.bmp"
EndDataSection
Image
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Message par Ulix »

Merci Flype :wink:

Je me douté qu'il fallait utilisé AttachProcess(Instance), l'aide sur les DLL la citée comme étant réserve, je ne comprennais pas a quoi.

ProcedureDLL AttachProcess(Instance)
L'argument "(Instance)" correspond a quoi ?
Faut-il y mettre une valeur quelconque , un Hande ?
Répondre