Problème avec une variable statique

Zekk65 Messages postés 4 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 24 juin 2008 - 24 juin 2008 à 10:03
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 24 juin 2008 à 22:08
Bonjour à tous,

Je vous expose en quelque lignes mon problème:

J'ai une DLL (c++) appelée par un programme windev.

Dans cette DLL, j'ai un première fonction qui récpuère une trame.
D'autres fonctions viennent récupérer la partie de la trame qui leur intéresse.
Toutes mes fonctions sont externes pour pouvoir être appelées par WinDev, j'ai donc besoin d'une variable dans laquelle je place ma trame récupérée dans la première fonctions, et qui va être réutilisée par les autres fonctions.

A noter que mes fonctions s'exécutent dans un ordre bien précis (pas de risque donc qu'une fonction qui traite la trame soit appelée avant que la trame soit récupérée).

On m'a conseillé de placer ma variable "trame" comme statique, chose que je ne maitrise pas donc si quelqu'un pourrait m'aider (variable de type strin).

Merci à vous !

6 réponses

Zekk65 Messages postés 4 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 24 juin 2008
24 juin 2008 à 12:05
Pour apporter un peu de précisions :

J'ai créé une variable statique dans le .h en public comme ceci:
 
" MaClass.h"

class CMaClass {

public:
    CMaClass();
   ~CMaClass();

    //Variables
    static int maVar;
  
};
int CMaClass::maVar = 0;

Dans ma première fonction, il y a tout un traitement puis je retourne "CMaClass::maVar" et c'est la bonne valeur qui m'est affichée.
Dans ma deuxième fonction, il y a juste un "return CMaClass::maVar" pour voir si il a gardé la valeur retournée dans la première fonction, et là il me retourne 0 (ou n'importe quelle valeur avec laquelle je l'aurais initialisé).

Quelqu'un aurait-il une solution pour garder la valeur d'une fonction à l'autre ?

Merci d'avance !!
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 juin 2008 à 12:33
Oui une variable statique garde sa valeur n'importe ou dans le programme tant que tu n'as qu'un seul "contexte" mémoire ! Or avec une dll, c'est beaucoup plus complexe, car la dll a déja été linké, et la variable static "CMaClass::maVar" n'est pas la meme dans la dll et dans ton exécutable. Donc conclusion, n'utilises pas de variable static si elle est accessible de l'exécutable et de la dll.
0
Zekk65 Messages postés 4 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 24 juin 2008
24 juin 2008 à 13:52
Tout d'abord merci de ta réponse.
Etant donné que ma dll n'est chargée qu'une fois par le programme hôte, ça ne rentre pas dans la condition de "un seul contexte mémoire" ?

J'ai bien compris que le fait que je sois "sous DLL" me restreint au niveau de mes variables, mais aurais tu une solution pour qu'une variable garde la valeur que je lui ai donnée entre deux fonctions exportées (la première récupère maVar, la deuxième doit traiter maVar) ?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 juin 2008 à 19:53
A priori, si tes deux fonctions dans la dll, il n'y aura pas de pb. Mais c'est la dll qui définir la valeur de ta variable. Mais a ta place, j'éviterais tout simplement les variables static dans ton cas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zekk65 Messages postés 4 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 24 juin 2008
24 juin 2008 à 20:27
j'ai l'alternative des Files que j'ai déjà testé, je voulais évité d'utiliser cette méthode, mais j'ai pas l'air d'avoir bcp d'autres solutions :)
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 juin 2008 à 22:08
Mais j'ai du mal a comprendre pourquoi tu utilises une dll.
0
Rejoignez-nous