COMMUNICATION ENTRE DEUX INSTANCES D'UN MÊME PROGRAMME
DarthPredateur
Messages postés30Date d'inscriptionvendredi 17 janvier 2003StatutMembreDernière intervention25 mars 2003
-
22 mars 2003 à 09:22
cs_yannickt
Messages postés64Date d'inscriptionlundi 25 août 2003StatutMembreDernière intervention22 novembre 2011
-
4 août 2004 à 23:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_yannickt
Messages postés64Date d'inscriptionlundi 25 août 2003StatutMembreDernière intervention22 novembre 2011 4 août 2004 à 23:08
L'idée est excellente, le produit fonctionne bien, mais quelle idée d'avoir tous mis ca dans le même prog! Je Comprends que vous vouliez démontrer comment éradiquer les multiples instances, mais c'est un tel cafouillis! Heureusement, vous avez bien commenté, me permettant ainsi de comprendre votre code, sans ça...! Mais bravo quand même!
facdaar
Messages postés64Date d'inscriptionlundi 24 mars 2003StatutMembreDernière intervention23 février 2009 3 juin 2003 à 00:16
Chapeau bien bas
cs_OphidiaN
Messages postés235Date d'inscriptionmercredi 4 avril 2001StatutMembreDernière intervention 9 novembre 2007 4 mai 2003 à 21:58
trop bon :)
fluminis
Messages postés73Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention20 juin 2005 4 mai 2003 à 13:51
Youpi, depuis le temps que je cherchais a faire ca !
bon j'ai encore des problemes pour adapter cette source à mes besoins mais vraimant bravo !!
fredlynx
Messages postés662Date d'inscriptionmercredi 16 janvier 2002StatutModérateurDernière intervention16 octobre 20103 28 mars 2003 à 19:19
app.previnstance c ton choix .. moi ça fait longtemps que je ne l'utilise plus !
Alors si tu as quelques neurones à perdre... parcours les info de chez MS et tu veras pourquoi ...
man15372
Messages postés20Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention27 septembre 2004 28 mars 2003 à 19:06
Mwouai ...
Pour le conflit entre instance y'a plus simple :
app.previnstance te donne le handle d'une instance probable déja lancée.
Pour la communication entre tes 2 instances il y a une api :
alors avec l'api sendmessage tu peut même evoyer un message personnalisé. entre 2 application (Bien sur à condition que cette appli soit prête à le recevoir sinon il ne sera pas traité).
Voila INSTANCE.EXE est remplacable par 1 ligne pour le problème de l'instance et 1 ligne pour l'API sendmessage, 1 ligne pour l'envoi du message et 2 lignes pour la récupération via un événement personnalisé.
Total 5 lignes.
Ca fait pas mal d'économie de code ainsi que une plus petite perte de
neuronnes.
Cordialement.
man15372
DarthPredateur
Messages postés30Date d'inscriptionvendredi 17 janvier 2003StatutMembreDernière intervention25 mars 2003 24 mars 2003 à 17:28
moi je dis quel merde c'est de la merde c vieux OS :)
fredlynx
Messages postés662Date d'inscriptionmercredi 16 janvier 2002StatutModérateurDernière intervention16 octobre 20103 24 mars 2003 à 15:31
Bien vu pour W98 Le soucis venait de fait que sous 98 on ne passe pas par la fonction:
Private Sub Class_Terminate()
'Retire le subclass
DetachCallback
End Sub
Pourquoi ???
Donc en fait on ne supprimé pas le callback d'ou le plantage...
La modif : un ajout d'appel de DetachCallback dans la fonction de sortie automatique et l'ajout d'une fonction Public Sub Class_Terminate98() pour l'arrêt en manuel voir exemple ci-dessus.
Merci a vous pour les infos :)
suoe
Messages postés10Date d'inscriptionlundi 3 février 2003StatutMembreDernière intervention13 mars 2004 24 mars 2003 à 14:33
salut pas mal ton programme mais il plante sous win98.Kess ki plante voila le message à toi de déchiffrer ;-) lol :
INSTANCE a causé une défaillance de page dans
le module à 0000:00000000.
Registres :
EAX=00000000 CS=018f EIP=00000000 EFLGS=00010246
EBX=00000002 SS=0197 ESP=0063fa60 EBP=0063fad4
ECX=004034c5 DS=0197 ESI=00000000 FS=4ce7
EDX=816a3ec8 ES=0197 EDI=0063fadc GS=0000
Octets à CS : EIP :
01 00 00 00 65 04 70 00 16 00 cd 09 65 04 70 00
État de la pile :
004034c5 00000880 00000002 00000000 00000000 0063fadc 00008b4c 0063fb28 0107ccb4 0000085c 0063fae4 00000000 00000000 0000085c 00000002 00000000
fredlynx
Messages postés662Date d'inscriptionmercredi 16 janvier 2002StatutModérateurDernière intervention16 octobre 20103 23 mars 2003 à 16:55
C a dire ça plante ?? Je n'ai pas testé sous 98 :( mais je ne vois pas trop ce qui peut géner... Essaye de faire comme ça dans l'exemple et recompile..
Private Sub Form_Load()
Label2.Caption = "Cette application est la première instance du programme lancé... " & vbCrLf & _
"Si vous relancer une autre fois l'application alors...." & vbCrLf & vbCrLf & _
"Vous recevrez un message de la deuxièmme instance dans le text box ci-dessus"
'Déclaration de la classe
Set My_Instance = New InstanceClass
'Initialisation de la classe
My_Instance.InitClass Me.hwnd
'Renseigne le texte à faire passer au textbox de l'autre instance
My_Instance.CommandLine = "Message envoyer par la deuxième instance !!! "
'Définition de l'action a réalier
'Ici on anvoie le texte à l'instance déja en mémoire et on arrête le prog
My_Instance.ActionCmd = None
'Vas teste :) :) :)
If My_Instance.PrevInstace = True Then
My_Instance.SendTexte
End
End If
End Sub
logisim
Messages postés49Date d'inscriptionmardi 8 mai 2001StatutMembreDernière intervention14 août 2004 23 mars 2003 à 16:21
Super, mais lorsqu'on lance la deuxième instance ça plante, même si la ligne de commande est bien passée. Je suis sous Win98, une solution ?
Bricomix
Messages postés340Date d'inscriptionvendredi 11 octobre 2002StatutMembreDernière intervention14 février 2005 22 mars 2003 à 11:55
Merci pour cette source ! Je m'étais déjà posé la question, sans y réfléchir d'avantage. Et toi, tu l'as fait !! 10/10
DarthPredateur
Messages postés30Date d'inscriptionvendredi 17 janvier 2003StatutMembreDernière intervention25 mars 2003 22 mars 2003 à 09:22
4 août 2004 à 23:08
3 juin 2003 à 00:16
4 mai 2003 à 21:58
4 mai 2003 à 13:51
bon j'ai encore des problemes pour adapter cette source à mes besoins mais vraimant bravo !!
28 mars 2003 à 19:19
Alors si tu as quelques neurones à perdre... parcours les info de chez MS et tu veras pourquoi ...
28 mars 2003 à 19:06
Pour le conflit entre instance y'a plus simple :
app.previnstance te donne le handle d'une instance probable déja lancée.
Pour la communication entre tes 2 instances il y a une api :
alors avec l'api sendmessage tu peut même evoyer un message personnalisé. entre 2 application (Bien sur à condition que cette appli soit prête à le recevoir sinon il ne sera pas traité).
Voila INSTANCE.EXE est remplacable par 1 ligne pour le problème de l'instance et 1 ligne pour l'API sendmessage, 1 ligne pour l'envoi du message et 2 lignes pour la récupération via un événement personnalisé.
Total 5 lignes.
Ca fait pas mal d'économie de code ainsi que une plus petite perte de
neuronnes.
Cordialement.
man15372
24 mars 2003 à 17:28
24 mars 2003 à 15:31
Private Sub Class_Terminate()
'Retire le subclass
DetachCallback
End Sub
Pourquoi ???
Donc en fait on ne supprimé pas le callback d'ou le plantage...
La modif : un ajout d'appel de DetachCallback dans la fonction de sortie automatique et l'ajout d'une fonction Public Sub Class_Terminate98() pour l'arrêt en manuel voir exemple ci-dessus.
Merci a vous pour les infos :)
24 mars 2003 à 14:33
INSTANCE a causé une défaillance de page dans
le module à 0000:00000000.
Registres :
EAX=00000000 CS=018f EIP=00000000 EFLGS=00010246
EBX=00000002 SS=0197 ESP=0063fa60 EBP=0063fad4
ECX=004034c5 DS=0197 ESI=00000000 FS=4ce7
EDX=816a3ec8 ES=0197 EDI=0063fadc GS=0000
Octets à CS : EIP :
01 00 00 00 65 04 70 00 16 00 cd 09 65 04 70 00
État de la pile :
004034c5 00000880 00000002 00000000 00000000 0063fadc 00008b4c 0063fb28 0107ccb4 0000085c 0063fae4 00000000 00000000 0000085c 00000002 00000000
23 mars 2003 à 16:55
Private Sub Form_Load()
Label2.Caption = "Cette application est la première instance du programme lancé... " & vbCrLf & _
"Si vous relancer une autre fois l'application alors...." & vbCrLf & vbCrLf & _
"Vous recevrez un message de la deuxièmme instance dans le text box ci-dessus"
'Déclaration de la classe
Set My_Instance = New InstanceClass
'Initialisation de la classe
My_Instance.InitClass Me.hwnd
'Renseigne le texte à faire passer au textbox de l'autre instance
My_Instance.CommandLine = "Message envoyer par la deuxième instance !!! "
'Définition de l'action a réalier
'Ici on anvoie le texte à l'instance déja en mémoire et on arrête le prog
My_Instance.ActionCmd = None
'Vas teste :) :) :)
If My_Instance.PrevInstace = True Then
My_Instance.SendTexte
End
End If
End Sub
23 mars 2003 à 16:21
22 mars 2003 à 11:55
22 mars 2003 à 09:22