Une fenetre qui veut pas se fermer et j'ai froid !!![Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Une fenetre qui veut pas se fermer et j'ai froid !!![Résolu]

Message par Kwai chang caine »

Bonjour à tous

Il m'arrive un truc de ouf (Et oui encore un :oops:)

Si je fais une DLL hypersimple avec juste une fenetre dedans et que je l'appelle en VB, et ben quand je la ferme elle ne disparait pas 8O

Ca marche en PB mais pas en VB
D'habitude j'ai pas de problemes, j'y comprend rien, j'suis désespéré :cry:

J'ai changé de becane et pareil
Si quelqu'un a une idée elle est la bienvenue


Code VB

Code : Tout sélectionner

Public Sub Form_Load()
 OpenWindows
End Sub
DLL PB

Code : Tout sélectionner

ProcedureDLL OpenWindows()
 OpenWindow(0,0,0,100,100,"ICC",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar) 
 Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndProcedure
Je vous remercie et bonne journée
Dernière modification par Kwai chang caine le ven. 03/oct./2008 16:15, modifié 1 fois.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

si j'ai bien compris

tu as crée un Dll en vb et tu appelle cette Dll avec PB ?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Eh bien non, tu as pas compris.
C'est justement l'inverse

Je viens de trouver la solution.
C'est un truc de dingue.

En fait VB y veut pas liberer la DLL tout seul 8O
Meme si je fais qu'un declare et que je charge pas la DLL
Je comprend pas avant il le faisait et plus maintenant

Alors, j'ai continué à fouiner et je suis tombé sur l'api

Code : Tout sélectionner

Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Elle donne le handle d'une DLL deja ouverte :D

Alors j'ai fait un

Code : Tout sélectionner

Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long

FreeLibrary (GetModuleHandle("MaDll.dll"))
Et ça marche, mais j'ai toujours pas compris pourquoi, je suis obligé de le faire à la mano maintenant :?
Enfin si quelqu'un a une idée.......j'suis preneur car j'aime pas les trucs qui restent sans explication, c'est encore une source de bug ulterieur

Bon pour ceux qui lisent ce POST merci de votre attention
Bonne journée
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

il y a autre chose

fait donc un "closewindow" aussi

Parce que tu charges la librairie et tu lances le bout de code

mais dans ton code, tu fermes la fenêtre ou ? nulle part
En PB, ca marche car ton programme s'arrête donc ca ferme la fenêtre

Mais en VB, ton programme n'est pas forcément fini après la fin de ta fonction en dll. donc il faut que tu fermes ta fenêtre dans la dll

Ton astuces de libérer la librairie pour fermer la fenêtre, je ne suis pas sur que ce soit bien propre.

Moi je fermerais la libraire en fin de programme VB (pour ne charger qu'une fois la librairie) et je m'arrangerais pour que la dll sache fermer les fenêtres qu'elle ouvre quand on l'utilise
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Soldat
J'etais deja un de tes fervents admirateurs.
Mais alors la, je ne sais pas comment te remercier.

Tu as milles fois raison, j'ai completement oublié cette instruction :oops:
Quand j'ai lu ton POST, une puissante force attirait les deux organes qui me permettent d'entendre vers une irresistible ascension, et seul mot, que dis-je un mot, un son, me vint à l'esprit :

:oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:
:oops: :oops: Hiiiiiiiiiiiiiii- Haaaaannnnnnnnnn !!!!!!!!! :oops: :oops:
:oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:

Comment ais-je pu négliger la plus elementaire des commandes.
Cela marchais tellement bien avec pure (je n'etonne personne, la !!!) que j'ai encore perdu de vue la superiorité de notre language adoré :oops:

Deja grace à toi, ma fenetre disparait :D
Je ne suis pas sur que cela ai résolu tous mes problemes, puisque lorsque je demande apres avoir fais le "FreeLibrary" un "GetModuleHandle("MaDll.dll"))" VB me donne encore une valeur 8O
Mais ce qui est sur, c'est que tu m'as vraiment déja fais faire un immense pas en avant, avec ton idée toute simple, tu ne peut pas te rendre compte à quel point et je t'en remercie encore mille fois 8)
J'espere que cet emplacement mémoire qui m'est donné par ce "GetModuleHandle("MaDll.dll"))" n'est pas trop dangereux.
Je continue mes recherches.

Ceci a une importance capital pour moi, car j'ai basé toute ma programmation depuis deux ans sur la gestion des DLL entre VB et PB, alors si je me rend compte que ça ne marche plus, pour X raison que ce soit, c'est tout mon monde qui s'ecroule :cry: :cry:

Je n'y comprend rien, c'est comme une chappe de plomb qui me tombe sur la tête puisque, jusqu'a présent ça a toujours marché nikel 8O
J'espere que j'ai pas encore fait la connerie de ma vie .....
Répondre