Aller au contenu

Conseils et explications : DLL


graig

Messages recommandés

Salut,

Je n'ai pas fait beaucoup d'émules lors de ma dernière question sur les DLL, j'espère que çà va mieux marcher mainenant.

Est ce qu'une DLL appelée par divers processus distincts peut conserver une variable commune aux procesus. Si oui comment et quand initialiser cette variable (et qui, la DLL dans son propre "main" ...).

Même si vous n'avez que des infos partielles : notemment sur le fait d'avoir du static dans une bibli dynamique ... n'hésitez pas.

En fait je vous donne un apperçu du PB plus général.

Une DLL recevant des infos (et les interprétant) d'une sonde doit les mettre dans une liste chainée. Ma liste chainée entre ce producteur et n consommateurs est déjà codée mais j'aimerai qu'elle (la liste) soit dans une DLL (c'est peut être idiot ?!). Le souci c'est de pouvoir partager entre n processus une donnée contenue dans une DLL.

C'est peut être impossible, est-ce qu'il faudrait mieux mettre la liste dans un processus à part plutôt que dans une DLL ?!?

Siouplait, juste quelques pistes ... :francais:

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...
Salut,

Je n'ai pas fait beaucoup d'émules lors de ma dernière question sur les DLL, j'espère que çà va mieux marcher mainenant.

Est ce qu'une DLL appelée par divers processus distincts peut conserver une variable commune aux procesus. Si oui comment et quand initialiser cette variable (et qui, la DLL dans son propre "main" ...).

Même si vous n'avez que des infos partielles : notemment sur le fait d'avoir du static dans une bibli dynamique ... n'hésitez pas.

En fait je vous donne un apperçu du PB plus général.

Une DLL recevant des infos (et les interprétant) d'une sonde doit les mettre dans une liste chainée. Ma liste chainée entre ce producteur et n consommateurs est déjà codée mais j'aimerai qu'elle (la liste) soit dans une DLL (c'est peut être idiot ?!). Le souci c'est de pouvoir partager entre n processus une donnée contenue dans une DLL.

C'est peut être impossible, est-ce qu'il faudrait mieux mettre la liste dans un processus à part plutôt que dans une DLL ?!?

Siouplait, juste quelques pistes ... :chinois:

Salut !

Je n'ai pas trop de conaisances dans les DLLs, mais je pense en savoir suffisement pour te répondre.

Une DLL, c'est une extension du programme (possibilité de mettre à jour une fonction sans renvoyer le programme complet).

Tu ne peut donc pas communiquer par une variable globale c'est exactement comme les process).

...(et qui, la DLL dans son propre "main" ...)...
Une DLL n'as pas de main!

Pour ton problème, je te conseil d'implanter ta liste chainée dans le process qui gère la sonde. Ensuite, pour communiquer, tu peux par exemple utiliser les sockets.

Lien vers le commentaire
Partager sur d’autres sites

Tu dois pouvoir utiliser les "memory-mapped file" ou bien explicitement créer une section de type "SHARED" ... la seconde méthode sera peut être mieux adaptée pour une liste chainée....ça fait longtemps que je n'ai pas fait de prog windows mais je crois que ça ressemble à ça (à vérifier, je pense que tu trouvera facilement des références avec google pour plus de précisions, j'en ai trouvé plein en utilisant la première de chaines qui suivent comme requete) :

#pragma data_seg(".sdata")

long unevariablepartagee = 0

#pragma data_seg()

Il te faudra rajouter ceci dans le fichier .DEF, pour indiquer que .sdata est une sedtion partagée accessible en lecture/écriture... :

SECTIONS

.sdata READ WRITE SHARED

Après, il faut simplement gérer l'accès à tes données partagées (gérer les conflits quoi), à l'aide d'une sémaphore, d'un mutex ou d'un autre truc du même style...

>ne DLL n'as pas de main

En fait on peut dire que si, il est appelé lorsque la dll est chargée, souvent il ne fait rien d'autre que renvoyer un booléen mais un programmeur peut choisir d'y faire autre chose ...

Lien vers le commentaire
Partager sur d’autres sites

PS : j'ai fait une ptite recherche rapide et tu sera peut être interessé par les articles suivant :

"How to Share Data Between Different Mappings of a DLL" :

http://support.microsoft.com/kb/q125677/

ou

"How to Specify Shared and Nonshared Data in a DLL" :

http://support.microsoft.com/default.aspx?kbid=100634

ils sont accessibles en français...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Merci à tous pour votre participation. Depuis j'ai un peu avancé. En fait j'ai réussi à mettre ma liste dans une DLL et à l'utiliser par un programme et par une autre DLL via des fonctions _dllexport. Sous Dev-c++ les questions de "décoration" sont complètement transparentes, par contre quand on commence à mélanger les compilateurs les choses se gâtent nettement : Invocation statique ou dynamique de ma DLL, la complexité et la fréquence des plantages augmente grandement.

Conseil : Sur un projet, utilisez tous le même compilateur dès le début ! Pour ce qui est des DLL dev-c++ facilite grandement la vie aux novices.

sur ce : Bonnes vacances !

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...