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

Visual C++ Discussion :

runtime error avant main()


Sujet :

Visual C++

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut runtime error avant main()
    Bonjour,
    J'ai une appli qui m'affiche "runtime error" en debug avant même d'entrer dans main().
    En release elle va à peine plus loin et se plante aussi.
    Je me demande bien pourquoi ???
    Je pensais à un objet/variable static, mais je ne vois pas où/lequel.

    J'ai effacé les répertoires debug et release, rebooté la machine, rien n'y fait.
    Merci de m'aider s'il vous plait

    compilo: VS2005

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Bon, ben j'ai trouvé.
    J'ai du code hérité de VC++6 qui contient des couillonades comme celles-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // this seems to work: hope it always work!!!
    #	pragma data_seg(".CRT$XID")
    static _PVFV pXI_D=InitStuff;
    #	pragma data_seg()
     
    // this seems to work: hope it always work!!!
    #	pragma data_seg(".CRT$XTW")
    static _PVFV pXT_W=DoneStuff;
    #	pragma data_seg()
    Ça fonctionnait toujours très jusqu'à ma dernière compil qui date du 13 octobre. Et puis aujourd'hui, bardaf.
    Il semble qu'il y ait eut un KB (critical update) pour VS2005 récemment, je suppose que c'est à cause de ça.

    En tout cas ça ne m'arrange pas.
    Donc question: comment exécuter du code avant l'entrée dans main() sous VS2005 ?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 175
    Points : 12 302
    Points
    12 302
    Par défaut
    Généralement, le plus simple est de créer des objets globaux.
    Leur constructeur est appelé avant le main.
    Les membres statics de classe aussi, je crois.

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Oui, en effet.
    Ce que j'ai appelé "les couillonades" c'est justement du code qui doit être exécuter avant les objets globaux/statiques. Le problème de ces derniers c'est qu'on ne sait pas dans quel ordre ils sont créés, et pour peu qu'il y ait des interdépendances...
    Cette pratique n'est pas propre, bien sûr, mais c'est du vieux code qui ne demande qu'à être porté. Ce qui va prendre un peu de temps.

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    L'ordre d'initialisation au sein du même fichier ne change pas (jamais testé, mais ça doit être l'ordre de déclaration à priori).

    Quitte à faire goret, mets tout le code de ce genre dans le même fichier, dans le "bon" ordre de dépendance, et jette le code dans une oubliette avec un tag "A refondre proprement".

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Ce vieux code est un genre de CString qui utilise son propre allocateur de mémoire. Il a été écrit à l'époque sous Borland 3.5 (16 et 32 bits) puis porté sous VS6 (puis resté en l'état). Cet allocateur est initialisé avant toute chose mais une option de compilation permet d'utiliser les malloc/new classiques. J'ai donc simplement désactivé l'allocateur.

    Il est clair que cette classe CString n'est plus à utiliser, mais il reste des bouts de code ça et là. Le plus coriace étant un wrapper C++ autour de l'API ODBC qui utilise ce CString.

    Merci.

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

Discussions similaires

  1. Runtime error avec UDF/DLL
    Par pram dans le forum SQL
    Réponses: 6
    Dernier message: 22/04/2005, 10h30
  2. [LG]Runtime Error lors d'une recherche dans un fichier
    Par Fraynor dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2005, 22h51
  3. [TP]Runtime error 106 à l'exécution
    Par BlackTiger dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 25/01/2004, 21h50
  4. [LG]runtime error 202
    Par picsou123 dans le forum Langage
    Réponses: 2
    Dernier message: 14/11/2003, 22h53
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51

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