Passage de variable

Signaler
Messages postés
19
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
24 juin 2008
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
salut à tous j'ai besoin de vous
En effet je suis en train de créer une dll dans laquelle j'ai besoin d'une variable qui n'est jamais détruite car elle doit garder une valeur que j'ai besoin de réutiliser dans deux fonctions séparées.

Inutile de me parler de variables membres... j'ai déja essayé ... ;)

Si quelqu'un aurait une solution style variables globales en php ...

Merci d'avance !

8 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Essaye le mot cle  : static devant la declaration de ta variable.

A+
Mon site internet : http://pistol.petesampras.free.fr
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
"Si quelqu'un aurait une solution style variables globales en php ..."

Quoi ??? Quel est le rapport avec php ?

Si tu as besoin d'une variable que tu pourras utiliser dans 2 fonctions à la fois, déclare la en globale.
Cependant, attention.
Cette façon de procéder peut demander des synchronisations. En effet, étant donné que c'est une dll, tu n'as donc pas de contrôle sur les threads de l'utilisateur.
Exemple, si tu utilises fonction1 sur thread1 et fonction2 sur thread2, il y a des chances pour que les 2 fonctions soient appelées "en même temps" et donc que la valeur de la variable soit modifier par, disons, fonction2 avant que fonction1 ait le temps de la traiter.

C++ (@++)<!--
Messages postés
19
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
24 juin 2008

merci d'avoir répondu


mon problème vient du fait que je dois dans une première fonction stocker une trame en string puis depuis d'autres fonction appeler cette trame et retourner certaines parties je dois donc stocker cette trame pour que je puisse la rappeler a n'importe quel moment depuis ma dll
Messages postés
19
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
24 juin 2008

j'expose un peu plus précisément mon problème:

Fonction1: récupère une trame qui doit être sauvegardée dans une variable
Fonction2 : récupère le début de la trame
Fonction3 : récupère le milieu de la trame
Fonction 4: récupère la fin de la trame

Bref, la trame doit être stockée temporairement pour être utilisée par ces fonctions.

@SAKingdom : mes fonctions traitent la trame dans un ordre bien précis, et elles ne peuvent êtres appelées que dans cet ordre là ;)

merci de vos réponses.

ps: je vais tester "static"
Messages postés
19
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
24 juin 2008

j'ai testé static soit je ne sais pas m'en servir soit ça marche pas
comment l'utilisé?
esque c'est sur que ça marche??
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Faut ecrire :
static string MaString;
En ajoutant static tu as transformee ta variable locale en une variable globale. 

A+
Mon site internet : http://pistol.petesampras.free.fr
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
void tete () {
    static int toto;
    ...
}

toto n'est utilisable que dans tete. La porté reste donc locale même si la variable est considérée comme globale.

int toto;

void tete () {
    toto = 5;
    ...
}

toto est utilisable dans toute les fonctions qui suiveront.
Attention. Mon commentaire sur les synchronisations s'applique toujours.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
"@SAKingdom : mes fonctions traitent la trame dans un ordre bien précis,
et elles ne peuvent êtres appelées que dans cet ordre là ;)"

Ah ok. Ta dll est donc limité à n'être utilisée que sur un seul thread à la fois. Je considère aussi que tu ne souhaites pas redistribuer ta dll.
Dans le cas contraire, des synchros (peut-être pas (seulement) dans la dll cependant) et certaines sécurité face à l'utilisation de tes fonctions (l'ordre surtout d'après ce que je peux comprendre) s'imposes.

C++ (@++)<!--