Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Variable globale dans une DLL

4 réponses
Avatar
Nicolas Favre-Felix
Bonjour tout le monde.

Je crée une DLL que je dois appeler (par LoadLibrary) plusieurs fois lors de
l'éxécution de mon moteur. La fonction présente dans cette DLL comporte une
phase d'initialisation qui modifie une variable. J'aimerais n'avoir à appeler la
phase d'initialisation qu'une fois, mais j'ai peur qu'après le premier appel la
variable soit détruite. Comment rendre la variable statique, de sorte qu'elle
reste en mémoire après l'appel? Je ne peux pas renvoyer la variable lors de
l'initialisation pour ensuite la passer en paramètre à chaque appel.

Je vous remercie par avance.
--
Ce message a été posté via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr

http://forums.club-internet.fr/

4 réponses

Avatar
Fabien LE LEZ
On 03 Jul 2003 23:34:50 GMT, Nicolas Favre-Felix
wrote:

[...] DLL [...] LoadLibrary [...]


fr.comp.os.ms-windows.programmation

--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
Alexis
"Loïc Joly" a écrit dans le message de
news:be4hfa$76e$
Alexis wrote:
[...]

Je sais pas trop si j'ai saisi la question.... mais si tu veux une
variables


a laquelle tu accedes plusieurs fois... tout en voulant la conserver, ca
ressemble tres fort a un pattern appelé le singleton. Ce pattern (si tu
connais pas) permet d'avoir un classe qui n'a qu'une et unique instance
et


qui peut etre acceder de n'importe ou dans ton programme.


[... snip code ...]

C'est peut etre un peut long mais ca sert enormement ce pattern (voir
Design


Patterns)



Une autre façon de l'écrire plus légère qui marche bien dans les cas de
base :

class Singleton
{
Singleton(); // Déclaré en privé => On ne peut pas instancier
directement

Singleton &instance();
};

Singleton &Singleton::instance()
{
static Singleton theInstance;
return theInstance;
}



desolé d'avoir oublié de déclarer le constructeur en "private".. c'est écrit
dans le bouquin... et pour la référence... comment controles tu si elle est
valide ou non ? c'est la référence sur le pointeur ?? j'ai voulu donner un
exemple simple :) mais le coup de la référence me tues .. et je comprends
pas a vrai dire. Pour moi, le pointeur est une bonne raison de valider le
fait que l'objet est valide ou non... mais dans le cas d'un référence,
comment fais tu pour valider le fait qu'elle est valable ?
Je serai heureux de connaitre la reponse :) peut etre que lundi...
j'apprendrai quelque chose a mes collegues:)

a+

a+


Avatar
Loïc Joly
Alexis wrote:
class Singleton
{
Singleton(); // Déclaré en privé => On ne peut pas instancier


directement

Singleton &instance();
};

Singleton &Singleton::instance()
{
static Singleton theInstance;
return theInstance;
}




desolé d'avoir oublié de déclarer le constructeur en "private".. c'est écrit
dans le bouquin...



et pour la référence... comment controles tu si elle est
valide ou non ?


Je me débrouille pour qu'elle soit toujours valide.

c'est la référence sur le pointeur ??


Il n'y a pas de pointeur.

j'ai voulu donner un
exemple simple :) mais le coup de la référence me tues .. et je comprends
pas a vrai dire. Pour moi, le pointeur est une bonne raison de valider le
fait que l'objet est valide ou non... mais dans le cas d'un référence,
comment fais tu pour valider le fait qu'elle est valable ?


La première fois qu'on appelle la fonction instance (que j'ai oublié de
mettre publique, d'ailleur...), l'objet statique theInstance est
automatiquement crée. On retourne alors une référence dessus. Les autres
fois, je retourne juste une référence à ce même theInstance. A la fin du
programme, il sera automatiquement détruit.

Avantage : On n'a pas à gérer la durée de vie du singleton, mais on peut
toujours décider du moment de sa création.
Inconvénient : On ne peut pas décider du moment de la mort du singleton.

--
Loïc


Avatar
Christophe Lephay
"Alexis" a écrit dans le message de
news:3f05cb92$0$17137$

"Loïc Joly" a écrit dans le message de
news:be4hfa$76e$
class Singleton
{
Singleton(); // Déclaré en privé => On ne peut pas instancier
directement

Singleton &instance();
};

Singleton &Singleton::instance()
{
static Singleton theInstance;
return theInstance;
}


et pour la référence... comment controles tu si elle est
valide ou non ? c'est la référence sur le pointeur ?? j'ai voulu donner un
exemple simple :) mais le coup de la référence me tues .. et je comprends
pas a vrai dire. Pour moi, le pointeur est une bonne raison de valider le
fait que l'objet est valide ou non... mais dans le cas d'un référence,
comment fais tu pour valider le fait qu'elle est valable ?
Je serai heureux de connaitre la reponse :) peut etre que lundi...
j'apprendrai quelque chose a mes collegues:)


Il n'y a plus d'avantage à tester si le pointeur sur l'instance est valide
que si la reférence est valide. En cas d'echec d'allocation, une exception
est lancée et te tient donc informé (en interrompant à priori le programme)
quand l'objet n'a pas pu être créé. Tu peux donc supposer dans ton code que
l'objet est valide, que tu y accèdes via une reférence ou un pointeur.

Chris