IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Gestion des variables - mémoire ?


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2002
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Gestion des variables - mémoire ?
    Bonjour tout le monde,
    Je viens de me mettre à Delphi 6. J'étais très habitué à Visual basic, et j'avoue que le passage de l'un à l'autre me pose des problèmes.

    Je ne comprends pas la gestion de l'allocation de mémoire pour les différents types de variable ! Je vais essayer d'être un peu plus clair.

    Dans une procédure, j'ai cru comprendre que si je déclare une variable, un place mémoire lui est affectée, et ainsi, je peux l'utiliser dans toute la procédure à ma guise ... Seulement je me rends compte qu'à certains moments, la valeur affectée à la variable est modifiée, comment ? j'en sais rien !

    J'ai pas mal d'expérience sous VB et la gestion des variables locales et globales ne me posaient pas de problèmes !

    Par exemple, voilà un exemple qui me laisse dubitatif !

    ex.
    procedure Form1.Test()
    var VARI : Integer;
    var tempStr : String;
    begin
    For VARI :=0 To 7 do
    begin
    tempSTr := iwrite(1,'Coco');
    ShowMessage (IntToStr(VarI) + ' : ' + tempStr);
    end;
    end;


    Remaque
    iwrite est une fonction "correctement définie" (test à l'appui) faisant appel à un fichier dll pour communiquer avec un appareil de mesure.


    Le problème que je rencontre dans ce cas est le suivant :
    le programme compilé, ne sort jamais de la boucle FOR car VarI ne passe pas de 0 à 7, mais prend des valeurs absurdes ... (105, 1328, ..)

    Je n'utilise même pas ce nom de variable dans la fonction iwrite ...

    Ce n'est pas le seul cas que je ne comprends pas, d'une façon générale, j'ai l'impression que dès que j'appelle une fonction, les variables locales et globales changent ...

    Si quelqu'un a compris ce que je demande, peut-il m'aider :

    Merci ...

    Rfab

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Ca m'a l'air d'un problème de débordement. Il semblerait (avec le peu d'information dont on dispose) que la fonction iwrite écrive un peu n'importe où dans la mémoire et par malchance dans la variable controlant la boucle. Pour le vérifier, il suffit d'effectuer un test simple consistant à remplacer la ligne d'appel à iwrite par autre chose, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      tempStr:= 'Test' + IntToStr(VARI);
    Cela permettra au moins de déterminer si le problème vient de là.

    PS: je réalise maintenant qu'il est également possible que le problème vienne de l'affectation de la valeur retournée par iwrite à la variable tempStr, même si c'est peu probable.

  3. #3
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Ta fonction "correctement définie" n'utilise pas de string j'espère ! Sinon, c'est sûr ! Ca ne fonctionnera pas.

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    A priori, la fonction que tu appelles semble être dans une DLL (cf. ton commentaire).

    Partant de là, je pense qu'il serait bon que tu vérifies les conventions d'appel de ton prototype de fonction (StdCall semble le plus approprié) car il existe des différences non négligeables entre langages (ex : C++) et les valeurs passées ou retournées peuvent en devenir complétement ésotériques.

    A+

    Didier

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2002
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Soltion trouvée ...
    Il s'agissait à priori des directives d'appel de la dll. Elle était en stdcall et après renseignement, il semble que la dll soit écrite à partir de C. Aussi, j'ai mis cdecl et ca a l'air de fonctionner !


    Merci beaucoup,

    Rfab !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. gestion des variables en mémoire
    Par tubaas dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/01/2010, 12h13
  2. Gestion des variables d'un document
    Par philben dans le forum Contribuez
    Réponses: 1
    Dernier message: 12/01/2008, 22h47
  3. Gestion des variables de session
    Par Yoplaboum dans le forum Struts 1
    Réponses: 8
    Dernier message: 09/11/2007, 17h07
  4. gestion des Variables Sessions
    Par Landolsi dans le forum ASP.NET
    Réponses: 8
    Dernier message: 08/02/2007, 14h30
  5. Réponses: 17
    Dernier message: 02/02/2006, 13h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo