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

C++Builder Discussion :

Problème avec le type variant [FAQ]


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 41
    Points : 28
    Points
    28
    Par défaut Problème avec le type variant
    Bonjour j’aimerais savoir si quelqu’un aurait connaissance d’un problème avec le type variant sous borland c++ 6.0
    Mon code fonctionne très bien sous l’ide mais dès que je lance l’exe en dehors de l’ide la mémoire est corrompue, et les variable locale sont écrasées , pourtant lorsque je trace pas à pas rien n'indique un dépassement de mémoire ????

    Soit je fais une bétise soit c’est un bug sous borland ?

    Merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    // Variant   vMsExcel = Variant::CreateObject("Excel.Application");
    // un peu plus haut dans le code
     
    void __fastcall TExcelAppl::BuildExcell(AnsiString fName,Variant *vMsExcel,int maxCol)
    {
     
        AnsiString Filter;
     
        Variant  cCell,
            cRange,
            cValue,
            vXLWorkbooks,
            vXLWorkbook,
            vSheetName,
            vWorkSheet;
     
        vXLWorkbooks =  vMsExcel->OlePropertyGet("Workbooks");
        vMsExcel->OlePropertySet("SheetsInNewWorkbook",(Variant)1);
        vXLWorkbook=vXLWorkbooks.OleFunction("Add");
     
        vXLWorkbook  = vMsExcel->OlePropertyGet("ActiveWorkbook");
        vWorkSheet	 = vXLWorkbook.OlePropertyGet("ActiveSheet");
     
        PropertyGet    Range("Range");
        PropertySet    SetFormula("Formula");
        Procedure      SaveAs("SaveAs");
        for(myRow=0;myRow<excellGrid->RowCount;myRow++)
        {
            myExcCol = 'A' ;
            for(myCol=0;myCol<maxCol;myCol++)
            {
                Filter=myExcCol;
                Filter += (myRow+1);
                Range.ClearArgs();
                SetFormula.ClearArgs();
                cRange =  vWorkSheet.Exec(Range << Filter);	[b]ici ça écrase mes variable locales quand je ne suis pas dans l'ide….[/b]
                Filter = excellGrid->Cells[myCol][myRow];
                cRange.Exec(SetFormula << Filter);
                myExcCol+=1;
            }
        }
     
        vXLWorkbook = vMsExcel->OlePropertyGet("ActiveWorkbook");
        vXLWorkbook.Exec(SaveAs<<fName);
        vXLWorkbook.OleFunction("Close", false);
     
        cCell=
        cRange=
        cValue=
        vXLWorkbooks=
        vXLWorkbook=
        vSheetName=
        vWorkSheet=false;
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello

    Curieux, je viens d'essayer ton bout de code, sous l'ide et en dehors, codeguard activé, et ca fonctionne nickel (fichier Excel créé avec le TStringGrid recopié dedans).
    La seule modif que j'ai fait, c'est de mettre for(int myCol... et for(int myRow=0...

    Tes variables locales sont ecrasées et tu ne récupères rien dans ton fichier Excel, c'est bien ça ?

    Le problème vient peut-être d'ailleurs ??

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    merci pour la réponse

    Je précise dans mon exemple j'ai déclaré les variable (myRow,...) en global sinon elle sont écrasée lorsque je les mets en local et ça boucle indéfiniment. Dans ce cas ce sont d'autres variables qui en prennent pour leur grade

    Lorsque je compile avec l'option full debug ça fonctionne nickel chez moi aussi et en dehors de l'ide, lorsque je compile en mode Release ça bug en dehors de l'ide


    dès lors en cherchant un peu je remarque que c'est dès que je coche pour optimiser le code que ça foire . Dès lors en compilant full release mais sans aucune optimization ça marche

    je suis de + en + certain qu'il y a un truc au niveau de borland à ce niveau


  4. #4
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    j'ai testé et effectivement c'est bizarre...

    peut être peux tu essayer d'englober la partie sensible avec un try/catch:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
         try{
            cRange = vWorkSheet.Exec(Range << Filter);// ici ça écrase mes variable locales quand je ne suis pas dans l'ide….
         }catch(Exception &e){
             ShowMessage(e.Message);
         }

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    j'ai trouvé je pense que c'est résolu


    en fait ceci ne marche pas avec code optimisé

    cRange = vWorkSheet.Exec(Range << Filter);
    j'ai revu tout mon code et j'ai enlevé toute mes procédures et j'ai opté pour une solution du genre

    cCell = vWorkSheet.OlePropertyGet("Range", StringToOleStr(Filter));
    ma conclusion est qu'il ne faut pas utiliser avec des ansistring vers un ole

    merci pour les réponse

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

Discussions similaires

  1. ActivX, Problème avec le type VARIANT
    Par personaprimonpseudo dans le forum C
    Réponses: 3
    Dernier message: 13/02/2007, 16h09
  2. Problème avec le type BLOB dans oracle
    Par pguedia dans le forum Oracle
    Réponses: 1
    Dernier message: 10/11/2005, 17h33
  3. problème avec le type timestamp
    Par aline dans le forum Oracle
    Réponses: 6
    Dernier message: 21/02/2005, 10h05
  4. [Débutant][Phppgadmin] problème avec les types
    Par PoY dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/08/2004, 17h06
  5. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48

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