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++ Discussion :

Avertissement "W8060 : Affectation incorrecte possible" inattendu dans BCB6


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Cadre retraité
    Inscrit en
    Novembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Cadre retraité
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 5
    Par défaut Avertissement "W8060 : Affectation incorrecte possible" inattendu dans BCB6
    J'ai réinstallé sur un PC tournant sous Windows 7 64 bits ma vieille version Borland C++ Builder 6 et recompilé une application développée il y a plus de 10 ans sous Windows XP. Cela me permet de continuer à modifier cette application sans avoir achevé la migration sur Borland XE....

    Alors que je ne rencontre pas d'anomalie sur le vieux PC sous XP, sur le PC sous Windows 7, la compilation génère un avertissement "W8060 : Affectation incorrecte possible". Cet avertissement est répété pour tous les fichiers .cpp de mon application, y compris celui contenant la fonction "WinMain". A chaque fois l'avertissement pointe sur l'instruction "#Pragma hdrstop". En voici un exemple :

    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
     
     
    #include <vcl.h>
    #include <dir.h>
    #pragma hdrstop  // l'avertissement se réfère toujours à cette ligne de code
     
    #include "Wgesmain.h"
    #include "Acc_selection_form.h"
    #include "View_Account.h"
    #include "Custaboutbox.h"
    #include "Remise_cheques.h"
    #include "Generic_form.h"
    #include "saisie_cta.h"
    #include "WGescopdef.h"
    #include "appel_fioul.h"
    #include "ouvre_dossier.h"
    #include "saisie_copro.h"
    #include "saisie_cpte.h"
    #include "Form_Liquidation.h"
    #include "Print_Menu.h"
     
    #define R 0x0F
     
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
     
    TMainForm *MainForm;
     
    //---------------------------------------------------------------------------
    __fastcall TMainForm::TMainForm(TComponent* Owner)
            : TForm(Owner)
    {  HANDLE hfile;
     .............
    J'ai vérifié l'Aide de BCB6, balayé de nombreux messages et articles sur l'avertissement W8060, sans trouver de piste sur une occurrence de cet avertissement en-dehors de problèmes de syntaxe C++. L'aide BCB n'évoque que l'erreur de code "if (a=b)..... " comme provoquant cet avertissement.

    Certes l'application fonctionne, mais je suis curieux et, comme je l'ai lu sur ce forum, il faut s'acharner à corriger son code pour faire disparaître les avertissements.

    Merci d'avance
    XRay78

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    Pour être sûr, as-tu tenté de retirer le pragma pour voir si l'avertissement subsistait? Il n'est pas rare que la ligne pointée ne soit pas la bonne...

    Sinon ça pourrait être une affaire de compilation conditionnelle, dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifdef __WINDOWS_XP
    blablabla
    #else
    int a = (b=c ? 1 : 0); // par exemple
    auquel cas l'avertissement apparaîtrait au chamgement d'OS

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Cadre retraité
    Inscrit en
    Novembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Cadre retraité
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 5
    Par défaut Je progresse.....
    Merci Stendhal666 pour ta réponse rapide. J'ai fait 2 tentatives :

    1) Comme tu le suggères, j'ai invalidé une bonne partie des instructions "#Pragma hdrstop". Dans la plupart des cas de fichiers VCL, l'avertissement W8060 pointe l'instruction "#Pragma package" (voir ci-dessous). Dans le fichier contenant la fonction "WinMain", elle se déplace sur la ligne suivante "USEFORM....". Enfin, dans les fichiers non VCL, je retrouve le W8060 pointant généralement sur la 1ère ligne de la 1ère fonction dans le fichier.

    2) J'ai ensuite coché, dans la case "En-têtes précompilés" des options du compilateur, la case "Aucun". Précédemment la case "cacher les en-têtes...." était cochée. Tous les avertissements W8060 ont alors disparu !!

    Je ne suis pas capable d'en tirer de conclusions......

    XRay78

    Voici l'impact de la suppression de la directive "#Pragma hdrstop" sur la plupart des fichiers VCL

    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
     
    #include <vcl.h>
    // #pragma hdrstop
     
    #include "Acc_selection_form.h"
    #include "Wgesmain.h"
    #include "WGescopdef.h"
     
    //---------------------------------------------------------------------------
     
    #pragma package(smart_init)   // l'avertissement W8060 pointe sur cette instruction
    #pragma resource "*.dfm"
     
    TAcc_View *Acc_View;
     
    //---------------------------------------------------------------------------
    __fastcall TAcc_View::TAcc_View(TComponent* Owner)
            : TForm(Owner)
    {  DateCurrent_ = TDateTime::CurrentDate();
    }
     
    //--------------------------------------------

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Cadre retraité
    Inscrit en
    Novembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Cadre retraité
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 5
    Par défaut Problème résolu, mais je ne sais pas pourquoi !
    L'informatique n'est décidément pas la discipline scientifique qu'on nous vante !

    Au départ de mon problème, je compilais un programme en C++Builder 6 avec l'option de compilation "Cacher les en-têtes précompilées" cochée et j'obtenais une série d'avertissements "W8060, affectation peut-être incorrecte".
    La réponse de stendhal666 m' a amené à considérer que les avertissements du compilateur pouvaient ne pas être pertinents et j'ai donc essayé n'importe quoi : j'ai commencé par supprimer toute pré-compilation des en-têtes et, le miracle s'est produit : les avertissements W8060 ont disparu.

    Deuxième miracle aujourd'hui, je remets mes options de compilation dans l'état initial en re-cochant l'option "Cacher les en-têtes précompilées" et aucun avertissement n'apparait.

    Pourquoi ces avertissements W8060 au départ, pourquoi plus d'avertissement W8060 maintenant ? Je n'en sais rien.
    Mais je ne vais pas m'accrocher davantage à ce problème.

    Merci stendhal666
    Xray78

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Parce que "cacher les en-tête précompilés" est une mauvaise traduction de "cache precompiled header", qui signifie non pas de planquer les dits en-tête, mais de les mettre en cache, et donc de ne les recompiler qu'à l'occasion.

    En les désactivant puis les réactivant, tu as forcé leur reconstruction, et donc ils sont à jours. Je pense qu'un gros clean+build aurait pu marcher.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Cadre retraité
    Inscrit en
    Novembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Cadre retraité
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 5
    Par défaut Tout est bien qui finit bien
    Merci leternel, je sais que je pourrai compter sur toi très longtemps encore.

    Je savais que "cacher" signifiait stocker en mémoire (RAM je suppose, pas sur le disque), mais je n'aurais jamais imaginé que le fait de forcer la re-compilation des en-têtes pouvait avoir le résultat obtenu.
    Je retire donc ma petite pique sur le caractère scientifique de l'informatique. Mais depuis que je fais de la micro (j'ai commencé avec deux ordinateurs construits avec un fer à souder vers 1985), j'ai souvent fait l'expérience de l'impossibilité de comprendre pourquoi quelque chose ne marchait pas puis après diverses tentatives finissait par marcher. Avant ton message, j'en étais à ce même stade.....

    Je vais pouvoir assurer la maintenance de mon appli sur BCB 6 et continuer à travailler doucement à la migration sur XE quelque chose.
    Merci encore à toi et à stenhal666

    XRay78

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

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