Aller au contenu

Conseils et explications : DLL

Featured Replies

Posté(e)

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:

Modifié par graig

  • 1 mois après...
Posté(e)
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.

Posté(e)

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 ...

Modifié par volk

Posté(e)

Au temps pour moi,

la fonction DllEntryPoint pour C++ Builder (je ne connais pas la création de DLL pour les autres softs...).

Posté(e)
  • Auteur

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 !

Archivé

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