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 :

Erreur de lieur


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9
    Par défaut Erreur de lieur
    Je sais que c'est très fréquent ce genre d'erreur mais je ne trouve en ce qui me concerne pourtant j'ai bien cherché

    Bref mon programme est tout simple, il contient d'une fiche avec un bouton, de deux labels (un qui indique "Home : " et l'autre est dynamique et qui affiche le chemin de la variable d'environnement "HOME" du système)

    En cliquant sur un bouton, je voulais afficher le chemin de "HOME"

    Mais en compilant il m'affiche l'erreur suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Lieur Erreur] Unresolved external '__fastcall Sysutils::GetEnvironmentVariableA(const System::AnsiString)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
    Je ne vois pas où est l'erreur???

  2. #2
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 30
    Par défaut
    Bonjour

    Dapres moi la methode
    Sysutils::GetEnvironmentVariableA(...)
    ets declaré dans la classe Sysutils ..mais cette methode nest pas definie dans la .cpp

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9
    Par défaut
    Voici mon code

    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 "USauveMail.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            Label1->Caption =       "HOME : " + GetEnvironmentVariable("HOME");
    }
    //---------------------------------------------------------------------------
    Pourtant il génère la même erreur

  4. #4
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 30
    Par défaut
    Essayez voir :"Construire tous les projets". Sinon je ne vois pas..

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Salut

    C'est bien fourbe comme erreur : si tu regardes le message d'erreur, il porte sur Sysutils::GetEnvironmentVariableA. Le 'A' vient du fait que GetEnvironmentVariable est une fonction définie dans windows.h, donc c'est une macro qui renvoie soit sur GetEnvironmentVariableA soit sur GetEnvironmentVariableW selon que tu as activé l'unicode ou non.

    Donc de deux choses l'une :

    - Soit GetEnvironmentVariable est une fonction redéfinie par Borland, auquel cas il faudra soit ne pas inclure windows.h, soit #undef-er GetEnvironmentVariable.

    - Soit tu utilises bien GetEnvironmentVariable de l'API Win32, auquel cas il te manque une bibliothèque dans les options du lieur.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9
    Par défaut
    Citation Envoyé par DamessS
    Essayez voir :"Construire tous les projets". Sinon je ne vois pas..
    J'ai essayé mais même erreur généré

    Citation Envoyé par Loulou24
    Salut

    C'est bien fourbe comme erreur : si tu regardes le message d'erreur, il porte sur Sysutils::GetEnvironmentVariableA. Le 'A' vient du fait que GetEnvironmentVariable est une fonction définie dans windows.h, donc c'est une macro qui renvoie soit sur GetEnvironmentVariableA soit sur GetEnvironmentVariableW selon que tu as activé l'unicode ou non.
    Oui je l'avais remarqué cette différence mais sans comprendre donc je te remercie de l'avoir expliqué...

    Citation Envoyé par Loulou24
    Donc de deux choses l'une :

    - Soit GetEnvironmentVariable est une fonction redéfinie par Borland, auquel cas il faudra soit ne pas inclure windows.h, soit #undef-er GetEnvironmentVariable.
    Je n'ai pas trouvé la directive d'inclusion du fichier windows.h...

    J'ai essayé la directive #undef-er GetEnvironmentVariable
    il me met une erreur de syntaxe dans #undef, donc j'ai enlevé -er, la compilation passe mais il m'affiche une autre erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C++ Erreur] USauveMail.cpp(21): E2268 Appel à une fonction non définie 'GetEnvironmentVariable'
    Alors j'ai essayé d'ajouter 'A' à la suite de GetEnvironmentVariable

    Il me ressort l'erreur de lieur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Lieur Erreur] Unresolved external '__fastcall Sysutils::GetEnvironmentVariableA(const System::AnsiString)' referenced from F:\ARAMENERALAMAISON\SAUVEMAIL\USAUVEMAIL.OBJ
    Puis j'ai remplacé 'A' par 'W', il me sort des erreurs de syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [C++ Erreur] USauveMail.cpp(21): E2034 Impossible de convertir 'char *' en 'const wchar_t *'
    [C++ Erreur] USauveMail.cpp(21): E2342 Mauvaise correspondance de type dans le paramètre 'lpName' ('const wchar_t *' désiré, 'char *' obtenu)
    [C++ Erreur] USauveMail.cpp(21): E2193 Trop peu de paramètre dans l'appel à '__stdcall GetEnvironmentVariableW(const wchar_t *,wchar_t *,unsigned long)'

    Alors je n'y comprends pas grand chose

    Citation Envoyé par Loulou24
    - Soit tu utilises bien GetEnvironmentVariable de l'API Win32, auquel cas il te manque une bibliothèque dans les options du lieur.
    Donc je voulais essayer la deuxième option mais je ne sais pas quelle bibliothéque rajouter et comment le faire ajouter dans le projet

    Oui je suis un débutant dans Borland Builder C++

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 4
    Par défaut
    je sais pas si tu veux tu parles d'une variable environnement que tu initialise toi-même... mais bon, je ne crois pas que "home" existe au départ.

    moi j'ai utilisé la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DWORD GetEnvironmentVariable(
     
        LPCTSTR lpName,	// address of environment variable name 
        LPTSTR lpBuffer,	// address of buffer for variable value 
        DWORD nSize 	// size of buffer, in characters 
       );
    donc ceci fonctionne plutot bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       char str[4096];
       AnsiString v;
       if(GetEnvironmentVariable("COMPUTERNAME", str, sizeof(str)))
       {
          v.printf(str);
       }
       Label1->Caption =       "HOME : " + v;
    pour les variables environnement que j'ai trouvé, tu peux aller voir ça :

    http://castelain.developpez.com/arti...ironnement/#L4

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9
    Par défaut
    Merci qZheneton pour avoir résolu mon problème

    Mais en ce qui concerne la variable d'environnement "HOME", il existe bel et bien dans Windows 2000 et aussi sur Linux

    je vais vérifier ce soir sur WinXP

    Et encore merci


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

Discussions similaires

  1. Erreur de lieur sur projet console
    Par Mercusyo dans le forum C++Builder
    Réponses: 6
    Dernier message: 23/09/2012, 14h49
  2. Erreur de lieur
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 30/08/2011, 19h54
  3. Erreur de lieur
    Par gandf dans le forum C++Builder
    Réponses: 10
    Dernier message: 30/07/2009, 09h17
  4. Erreur de lieur avec la librairie OpenCV
    Par pasqual dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/09/2008, 22h28
  5. Erreur de lieur
    Par root508 dans le forum C++Builder
    Réponses: 4
    Dernier message: 23/06/2007, 23h48

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