Je suis sous VC7 en C++ et j'ai un petit probleme de singleton. J'ai une lib
statique qui contient
un singleton. Celui ci est instancie dans mon projet exe et je veux utiliser
la meme instance dans ma dll. La methode directe ne marche pas
(getInstance). Je crois que cela vient du fait qu'au link de mon exe et de
ma dll, le compilo ne peut pas savoir que ce sera la meme instance alors que
les deux seront dans le meme espace d'adressage.
Est ce qu'il existe une solution elegante et simple pour resoudre ce
probleme? J'ai deja pense a creer un structure qui contiendrait l'instance
de tous les objets que je veux partager entre mon exe et mes dll et qui
serait passee en parametre a la creation de ma dll mais je trouve cette
solution un peu brutale puisque des dlls auraient acces a des resources dont
elles n'ont pas besoin.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Arnaud Debaene
plotark wrote:
Bonjour a tous,
Bonjour.
Je suis sous VC7 en C++ et j'ai un petit probleme de singleton. J'ai une lib statique qui contient un singleton. Celui ci est instancie dans mon projet exe et je veux utiliser la meme instance dans ma dll.
Si je comprends bien, le code de ton singleton est dans une lib statique et cette lib statique est linkée dans ton executable, c'est bien çà?
La methode directe ne marche pas (getInstance). Je crois que cela vient du fait qu'au link de mon exe et de ma dll, le compilo ne peut pas savoir que ce sera la meme instance alors que les deux seront dans le meme espace d'adressage.
Comment est implementé ton singleton? Il y a quoi dans ta méthode getInstance? Et comment ta DLL a-t-elle accès à ton objet singelton? Il est bien évident que si ta DLL est linkée elle aussi avec ta lib statique, tu vas te retrouver avec deux instances de singleton.... pas glob...
Vu que tu ne peux pas exporter un symbole depuis ton exe pour qu'il soit utilisables par ta DLL, je vois 2 solutions : - Tu passes ton instance de singleton à ta DLL lors d'un appel à une méthode de la DLL depuis ton exe. C'est plus ou moins ce que tu proposes, avec les désavantages que ca présente. - Placer le singleton dans une DLL dédiée à ca, et tous les autres modules utilisent cette DLL pour accéder au singleton.
Arnaud
plotark wrote:
Bonjour a tous,
Bonjour.
Je suis sous VC7 en C++ et j'ai un petit probleme de singleton. J'ai
une lib statique qui contient
un singleton. Celui ci est instancie dans mon projet exe et je veux
utiliser la meme instance dans ma dll.
Si je comprends bien, le code de ton singleton est dans une lib statique et
cette lib statique est linkée dans ton executable, c'est bien çà?
La methode directe ne marche
pas (getInstance). Je crois que cela vient du fait qu'au link de mon
exe et de ma dll, le compilo ne peut pas savoir que ce sera la meme
instance alors que les deux seront dans le meme espace d'adressage.
Comment est implementé ton singleton? Il y a quoi dans ta méthode
getInstance? Et comment ta DLL a-t-elle accès à ton objet singelton? Il est
bien évident que si ta DLL est linkée elle aussi avec ta lib statique, tu
vas te retrouver avec deux instances de singleton.... pas glob...
Vu que tu ne peux pas exporter un symbole depuis ton exe pour qu'il soit
utilisables par ta DLL, je vois 2 solutions :
- Tu passes ton instance de singleton à ta DLL lors d'un appel à une méthode
de la DLL depuis ton exe. C'est plus ou moins ce que tu proposes, avec les
désavantages que ca présente.
- Placer le singleton dans une DLL dédiée à ca, et tous les autres modules
utilisent cette DLL pour accéder au singleton.
Je suis sous VC7 en C++ et j'ai un petit probleme de singleton. J'ai une lib statique qui contient un singleton. Celui ci est instancie dans mon projet exe et je veux utiliser la meme instance dans ma dll.
Si je comprends bien, le code de ton singleton est dans une lib statique et cette lib statique est linkée dans ton executable, c'est bien çà?
La methode directe ne marche pas (getInstance). Je crois que cela vient du fait qu'au link de mon exe et de ma dll, le compilo ne peut pas savoir que ce sera la meme instance alors que les deux seront dans le meme espace d'adressage.
Comment est implementé ton singleton? Il y a quoi dans ta méthode getInstance? Et comment ta DLL a-t-elle accès à ton objet singelton? Il est bien évident que si ta DLL est linkée elle aussi avec ta lib statique, tu vas te retrouver avec deux instances de singleton.... pas glob...
Vu que tu ne peux pas exporter un symbole depuis ton exe pour qu'il soit utilisables par ta DLL, je vois 2 solutions : - Tu passes ton instance de singleton à ta DLL lors d'un appel à une méthode de la DLL depuis ton exe. C'est plus ou moins ce que tu proposes, avec les désavantages que ca présente. - Placer le singleton dans une DLL dédiée à ca, et tous les autres modules utilisent cette DLL pour accéder au singleton.
Arnaud
plotark
> - Placer le singleton dans une DLL dédiée à ca, et tous les autres modules utilisent cette DLL pour accéder au singleton.
Seulement un singleton dans la DLL me semble un peu excessif vu qu'il n'y a pas beaucoup de code. Ce que je vais faire, puisqu'il semble ne pas y avoir d'autres solutions simples c'est que je vais creer tous mes singletons dans des lib statiques et que je vais faire une factory dans une DLL qui sera linkee avec les libs statiques.
Merci,
Plotark
> - Placer le singleton dans une DLL dédiée à ca, et tous les autres modules
utilisent cette DLL pour accéder au singleton.
Seulement un singleton dans la DLL me semble un peu excessif vu qu'il n'y a
pas beaucoup de code. Ce que je vais faire, puisqu'il semble ne pas y avoir
d'autres solutions simples c'est que je vais creer tous mes singletons dans
des lib statiques et que je vais faire une factory dans une DLL qui sera
linkee avec les libs statiques.
> - Placer le singleton dans une DLL dédiée à ca, et tous les autres modules utilisent cette DLL pour accéder au singleton.
Seulement un singleton dans la DLL me semble un peu excessif vu qu'il n'y a pas beaucoup de code. Ce que je vais faire, puisqu'il semble ne pas y avoir d'autres solutions simples c'est que je vais creer tous mes singletons dans des lib statiques et que je vais faire une factory dans une DLL qui sera linkee avec les libs statiques.