Dll [Résolu]

Signaler
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
-
Salut,

Je dispose d'une DLL et deux de EXE.
Ma DLL permet d'initialiser une connection TCP/IP sur le port 5678, et d'y envoyer des données.

Je lance une premiere fois mon EXE, qui charge et demande a la DLL d'envoyer des données.
La DLL se connecte automatiquement sur le port 5678 et envoie les données.

Je lance une deuxieme fois mon EXE, qui charge et demande a la DLL d'envoyer des données.
C'est la que se pose le problème.
La connection etant deja établi, la nouvelle instance de ma DLL ne peut pas se connecter et plante donc.

Ma question est de savoir comment faire pour utiliser une et une seule instance de ma DLL, qui gerega toutes les
demande de connexion des différente instance de mes EXE.

Shell

3 réponses

Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
salut,

le plus simple est de creer une section partagee.

tu aurais bien deux instances de ta DLL mais tu pourras savoir ce que l'autre a déja fait.



#pragma data_seg("Shared")

bool tentative_de_connexion = false;

#pragma data_seg()

#pragma comment(linker, "/section:Shared,rws")



tu testes si (!tentative_de_connexion) et tu le mets a true.

enfin a toi de raffiner ...

dans ta section shared la tu peux metre n'importe quelle variable
pourvue qu'elle soit initialisée dans la section (attention car sinon
elle ne sera pas partagée)

je suis pas sur par contre qu'il soit efficace de mettre qqc comme une section critique ..



a+
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

Pourquoi ta dll ne peut pas se connecter et plante ? je vois pas ou est le probleme.

Peut etre que tu souhaites utiliser une seule connexion pour toutes les instances de tes exe ? WSADuplicateSocket() dans ce cas.
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009

Bonjour,



Il me semble, si je ne me trompe pas, que la DLL se décharge lorsque
que l'EXE se termine. Deux choses sont peut-être possible : Empêcher la
DLL de se décharger et créer une commande dans l'EXE pour fermer les
ports ouverts, ou (/et) tester si le port est ouvert (et
que c'est bien la DLL qu'il l'a ouvert) auquel cas on strap
l'ouverture.


thierry la fronde