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

Erreur LNK 2019, LNK 2028 sous VC++


Sujet :

C++/CLI

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut Erreur LNK 2019, LNK 2028 sous VC++
    Bonjour à tous,

    avant de vous exposez mon problème, je tiens à préciser que je suis un novice en programmation et que je découvre à peu près tout en C++. Mon domaine est plutôt l'électronique analogique.

    Je suis en stage et mon sujet est de mettre au point un driver. Pour le moment, je tente de mettre au point un application Windows qui me permettra de communiquer plus tard avec l'appareil USB.

    Je suis parti de codes trouvés sur le net, utilisant libusb. Sans y toucher, ce code ne compilait pas, j'avais un message comme quoi VC++ ne trouvait pas un .h. Je pense avoir réglé ce problème, il devait s'agir d'un fichier trop ancien et qui a changé de nom depuis le temps.

    Maintenant, mon soucis est lorsque je lance le programme en mode debug. J'obtiens le message suivant:

    ------ Début de la génération*: Projet*: Prog_PC, Configuration*: Debug Win32 ------
    stdafx.cpp
    .NETFramework,Version=v4.0.AssemblyAttributes.cpp
    USB_Part.obj : error LNK2028: jeton non résolu (0A000029) "extern "C" int __cdecl usb_bulk_read(struct usb_dev_handle *,int,char *,int,int)" (?usb_bulk_read@@$$J0YAHPAUusb_dev_handle@@HPADHH@Z) référencé dans la fonction "public: int __thiscall USB_Part::USB_BulkReceive(unsigned int)" (?USB_BulkReceive@USB_Part@@$$FQAEHI@Z)
    USB_Part.obj : error LNK2028: jeton non résolu (0A00002D) "extern "C" struct usb_bus * __cdecl usb_get_busses(void)" (?usb_get_busses@@$$J0YAPAUusb_bus@@XZ) référencé dans la fonction "public: struct usb_dev_handle * __thiscall USB_Part::open_dev(void)" (?open_dev@USB_Part@@$$FQAEPAUusb_dev_handle@@XZ)
    USB_Part.obj : error LNK2028: jeton non résolu (0A00002F) "extern "C" int __cdecl usb_find_devices(void)" (?usb_find_devices@@$$J0YAHXZ) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2028: jeton non résolu (0A000031) "extern "C" int __cdecl usb_close(struct usb_dev_handle *)" (?usb_close@@$$J0YAHPAUusb_dev_handle@@@Z) référencé dans la fonction "public: __thiscall USB_Part::~USB_Part(void)" (??1USB_Part@@$$FQAE@XZ)
    USB_Part.obj : error LNK2028: jeton non résolu (0A00003C) "extern "C" int __cdecl usb_claim_interface(struct usb_dev_handle *,int)" (?usb_claim_interface@@$$J0YAHPAUusb_dev_handle@@H@Z) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2028: jeton non résolu (0A00004C) "extern "C" int __cdecl usb_set_configuration(struct usb_dev_handle *,int)" (?usb_set_configuration@@$$J0YAHPAUusb_dev_handle@@H@Z) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2028: jeton non résolu (0A00004D) "extern "C" int __cdecl usb_bulk_write(struct usb_dev_handle *,int,char *,int,int)" (?usb_bulk_write@@$$J0YAHPAUusb_dev_handle@@HPADHH@Z) référencé dans la fonction "public: int __thiscall USB_Part::USB_BulkSend(unsigned int)" (?USB_BulkSend@USB_Part@@$$FQAEHI@Z)
    USB_Part.obj : error LNK2028: jeton non résolu (0A000051) "extern "C" struct usb_dev_handle * __cdecl usb_open(struct usb_device *)" (?usb_open@@$$J0YAPAUusb_dev_handle@@PAUusb_device@@@Z) référencé dans la fonction "public: struct usb_dev_handle * __thiscall USB_Part::open_dev(void)" (?open_dev@USB_Part@@$$FQAEPAUusb_dev_handle@@XZ)
    USB_Part.obj : error LNK2028: jeton non résolu (0A000053) "extern "C" int __cdecl usb_find_busses(void)" (?usb_find_busses@@$$J0YAHXZ) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2028: jeton non résolu (0A000056) "extern "C" int __cdecl usb_release_interface(struct usb_dev_handle *,int)" (?usb_release_interface@@$$J0YAHPAUusb_dev_handle@@H@Z) référencé dans la fonction "public: __thiscall USB_Part::~USB_Part(void)" (??1USB_Part@@$$FQAE@XZ)
    USB_Part.obj : error LNK2028: jeton non résolu (0A000057) "extern "C" void __cdecl usb_init(void)" (?usb_init@@$$J0YAXXZ) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" int __cdecl usb_close(struct usb_dev_handle *)" (?usb_close@@$$J0YAHPAUusb_dev_handle@@@Z) référencé dans la fonction "public: __thiscall USB_Part::~USB_Part(void)" (??1USB_Part@@$$FQAE@XZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" int __cdecl usb_release_interface(struct usb_dev_handle *,int)" (?usb_release_interface@@$$J0YAHPAUusb_dev_handle@@H@Z) référencé dans la fonction "public: __thiscall USB_Part::~USB_Part(void)" (??1USB_Part@@$$FQAE@XZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" struct usb_dev_handle * __cdecl usb_open(struct usb_device *)" (?usb_open@@$$J0YAPAUusb_dev_handle@@PAUusb_device@@@Z) référencé dans la fonction "public: struct usb_dev_handle * __thiscall USB_Part::open_dev(void)" (?open_dev@USB_Part@@$$FQAEPAUusb_dev_handle@@XZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" struct usb_bus * __cdecl usb_get_busses(void)" (?usb_get_busses@@$$J0YAPAUusb_bus@@XZ) référencé dans la fonction "public: struct usb_dev_handle * __thiscall USB_Part::open_dev(void)" (?open_dev@USB_Part@@$$FQAEPAUusb_dev_handle@@XZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" int __cdecl usb_claim_interface(struct usb_dev_handle *,int)" (?usb_claim_interface@@$$J0YAHPAUusb_dev_handle@@H@Z) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" int __cdecl usb_set_configuration(struct usb_dev_handle *,int)" (?usb_set_configuration@@$$J0YAHPAUusb_dev_handle@@H@Z) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" int __cdecl usb_find_devices(void)" (?usb_find_devices@@$$J0YAHXZ) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" int __cdecl usb_find_busses(void)" (?usb_find_busses@@$$J0YAHXZ) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" void __cdecl usb_init(void)" (?usb_init@@$$J0YAXXZ) référencé dans la fonction "public: int __thiscall USB_Part::USB_Init(void)" (?USB_Init@USB_Part@@$$FQAEHXZ)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" int __cdecl usb_bulk_write(struct usb_dev_handle *,int,char *,int,int)" (?usb_bulk_write@@$$J0YAHPAUusb_dev_handle@@HPADHH@Z) référencé dans la fonction "public: int __thiscall USB_Part::USB_BulkSend(unsigned int)" (?USB_BulkSend@USB_Part@@$$FQAEHI@Z)
    USB_Part.obj : error LNK2019: symbole externe non résolu "extern "C" int __cdecl usb_bulk_read(struct usb_dev_handle *,int,char *,int,int)" (?usb_bulk_read@@$$J0YAHPAUusb_dev_handle@@HPADHH@Z) référencé dans la fonction "public: int __thiscall USB_Part::USB_BulkReceive(unsigned int)" (?USB_BulkReceive@USB_Part@@$$FQAEHI@Z)
    C:\Documents and Settings\rdi-libre\Bureau\USB Drivers\_modele pour Prog_PC(win)_modif\Debug\Prog_PC.exe : fatal error LNK1120: 22 externes non résolus
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
    En parcourant le net, j'ai trouvé des choses comme quoi il fallait activer l'option /Tc ou /Tp.
    J'ai essayé... En /Tc, stdafx ne fonctionne pas, j'ai une erreur me disant que j'ai oublié de le mettre. En /Tp, rien ne change.
    J'ai été voir sur la msdn, j'y ai lu pas mal de choses mais de là à bien tout saisir... Le soucis n'est pas l'anglais mais mes connaissances en C++.
    Apparemment, il faudrait mettre extern "C" dans le programme, j'ai donc regardé s'il y était et c'est le cas.
    Après, je n'ai peut-être pas compris comment l'utiliser, c'est fort possible.

    Si jamais ça peut servir, j'utilise Visual C++ 2010 Express sous XP 32 bits.

    Et toutes mes excuses si je n'ai pas posté dans le bon topic, je laisse le soin à un modérateur de déplacer dans la partie appropriée.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ce sont des erreurs d'édition de liens: Il ne trouve pas les fonctions censées être dans le .lib. As-tu précisé au linker le .lib en question et son emplacement, dans les options du projet?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Tout d'abord, merci pour ta réponse rapide.

    Il s'agit bien de faire:

    Projet -> Propriétés -> Éditeur de liens -> Entrée
    ...et là j'indique les différents .lib nécessaires

    Si c'est bien ça, en effet il n'y était pas. Il n'est même pas dans le dossier où je place mes fichiers. J'ai donc lancé une recherche et je n'ai rien trouvé.
    Ca fait peut-être bricoleur, mais j'ai pu mettre la main sur la version plus vieille du .h et j'ai essayé ainsi.

    Ce point .h en appelle d'autres dont unistd.h et dirent.h. Lorsque je lance la compilation, un message me dit qu'il ne les trouve pas.
    fatal error C1083: Impossible d'ouvrir le fichier include*: 'unistd.h'*: No such file or directory
    Pour le premier, j'ai lu qu'il faudrait le remplacer par stdio.h car c'est son équivalent, est-ce vrai? (je me méfie de ce que je trouve selon les sites). Pour dirent.h, faut-il que je trouve un équivalent aussi ou simplement le télécharger et l'inclure au projet?

    Si le compilateur m'indiquent ces erreurs, cela veut-il dire que le .lib est bon cette fois? Ou alors il travaille d'abord sur les .h avant de se mettre sur les .lib?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Pour unistd.h ça va être plus compliqué que juste le remplaçer par <stdio.h>: Il faudra choisir tes headers au cas par cas selon ce les fonctions qui manquent, et certaines devront être carrément remplacées.

    Pour dirent.h, normalement tu dois pouvoir trouver sur le web un code de "dirent pour Windows". Mais il n'y aura pas qu'un .h, il y aura aussi un .c ou un .lib, probablement.


    Si le compilateur m'indiquent ces erreurs, cela veut-il dire que le .lib est bon cette fois? Ou alors il travaille d'abord sur les .h avant de se mettre sur les .lib?
    Il travaille d'abord sur les .h avant de se mettre sur les .lib.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Merci pour les renseignements.
    J'abandonne l'idée de <stdio.h> alors. Je vais répertorier les différentes fonctions de mon programme et rechercher les en-têtes appropriés du coup.

    Pour le <dirent.h>, j'ai commencé à chercher et il en existe plusieurs. Je compare les fonctions pour voir lequel correspond j'imagine?

    Le problème du .lib n'est donc pas forcément résolu...

    Je vais déjà appliquer tes conseils, merci beaucoup!

    Edit:
    Apparemment, il est souvent recommandé d'installer Cygwin... Pas vraiment ce que je recherche, je dois faire du Windows et rien que du Windows (eh oui...).
    Vu que je dois développer (pour le moment) une application qui me permettra de tester le driver (envoi d'une chaine de caractères, éventuellement un retour venant du périphérique), je ne perdrais pas moins de temps à réécrire moi-même toute l'application en utilisant libusb plutôt que de rechercher chaque fonction, les modifier, trouver les différents en-têtes à ajouter, etc...?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Désolé du double post (on ne peut plus éditer au bout d'un certain temps?)

    Ma petite application avance tranquillement mais surement. Le but est d'envoyer une chaine de caractère à une carte de test branchée sur le port usb. Cette carte a son driver d'installé sur le PC pour pouvoir communiquer avec lui, normal.

    Mon appli doit donc communiquer avec le driver, non? Et là, je ne vois pas comment faire
    Existe t-il une librairie Windows exprès? Ca me simplifierait bien les choses si c'était le cas. Faut-il connaître le code du driver aussi? J'imagine que tous les drivers sont codés différemment, la communication entre une appli et un driver ne se fait pas toujours de la même manière, non?

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Pour communiquer avec un driver kernel-mode, on fait typiquement un CreateFile() sur le nom exposé par le driver, puis des interactions avec DeviceIOControl() (ou WriteFile() et ReadFile() quand les devices sont des flux)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Merci pour la piste. Je devrais m'en sortir avec les infos du msdn.

    Je croise les doigts pour que mon prochain passage (bientôt j'espère) soit pour dire que j'ai terminé ce programme.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    En fait, j'ai encore quelques questions...

    J'ai une erreur avec la ligne de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char Guid[256];
    	strcpy_s(Guid,"\\\\.\\usb#vid_04d8&pid_0204#0001a0000000#{4329e34d-f2af-4612-8d6c-dfc96c9a2a8e}");
     
    CO_USB = CreateFile(
          Guid,
          ...
    );
    Le message:
    error C2664: 'CreateFileW'*: impossible de convertir le paramètre 1 de 'char [256]' en 'LPCWSTR'
    D'accord, le char ne correspond pas.... J'ai assez bêtement repris un exemple de code trouvé ici

    Borland ferait automatiquement la conversion mais pas Visual?
    J'ai vraiment l'impression de faire une erreur idiote et simple à résoudre, juste devant mon nez et pourtant je ne vois pas la solution

    Et au passage, les caractères #00a...#, ils correspondent à quoi?

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    J'ai plutôt l'impression que Borland compile en non-unicode.

    Code C compatible Unicode / pas Unicode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <tchar.h>
     
    TCHAR Guid[256];
    	_tcscpy_s(Guid, _TEXT("\\\\.\\usb#vid_04d8&pid_0204#0001a0000000#{4329e34d-f2af-4612-8d6c-dfc96c9a2a8e}"));
     
    CO_USB = CreateFile(
          Guid,
          ...
    );
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    J'ai testé sans utiliser le jeu unicode et ça compile.... Erreur toute bête résolue

    Par contre, les caractères entre VID/PID et DeviceGUID, je ne sais pas à quoi ça correspond.
    J'ai jeté un oeil dans le .inf des fois qu'y trouve des choses intéressantes mais rien ne m'a éclairé (ou alors je suis passé à côté...)

    EDIT:
    décidément, je cumule. Je fais finir par penser que je suis un handicapé du C++.
    Pour récupérer le contenu d'une TextBox (une chaine de caractère) et le mettre dans une variable (un tableau de char semble logique, non?), j'utilise GetWindowText. Comme un bon étudiant sérieux, j'ai lu attentivement le msdn, demandé de l'aide à google, navigué sur le forum... Et je n'y arrive toujours pas. Pire, je m’emmêle les pinceaux!

    Pour récupérer le handle du TextBox, dois-je utiliser une autre fonction avant? Il faut aussi convertir le contenu en char, non?

    Je ne suis même pas sûr de bien saisir le principe de fonctionnement alors qu'au début, ça me semblait simple à utiliser

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    A tête reposée, je crois que j'ai saisi le truc...

    Pour récupérer la contenu de ma TextBox, j'utilise GetWindowText. Pour utiliser cette fonction, il me faut le handle de ma TextBox et pour récupérer le handle... J'ai trouvé FindWindow.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //récupération du handle				 
    HWND Handle = FindWindow(NULL, "BoxEnvoi");
     
    	GetWindowText(
    		Handle,		//handle de BoxEnvoi
    	        Tab,			//buffer qui reçoit le texte
    	        128			//nombre de caractère max à copier
    	  );
    Et j'ai droit au mécontentement de Visual:
    Impossible de générer un constructeur de copie ou un opérateur pour l'assignation de copie lorsque UDT contient un tableau de taille zéro
    appli.obj : error LNK2028: jeton non résolu (0A000036) "extern "C" int __stdcall GetWindowTextA(struct HWND__ *,char *,int)" (?GetWindowTextA@@$$J212YGHPAUHWND__@@PADH@Z) référencé dans la fonction "private: void __clrcall appli::Form1::ButEnv_Click(class System::Object ^,class System::EventArgs ^)" (?ButEnv_Click@Form1@appli@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    appli.obj : error LNK2028: jeton non résolu (0A00004A) "extern "C" struct HWND__ * __stdcall FindWindowA(char const *,char const *)" (?FindWindowA@@$$J18YGPAUHWND__@@PBD0@Z) référencé dans la fonction "private: void __clrcall appli::Form1::ButEnv_Click(class System::Object ^,class System::EventArgs ^)" (?ButEnv_Click@Form1@appli@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    appli.obj : error LNK2019: symbole externe non résolu "extern "C" int __stdcall GetWindowTextA(struct HWND__ *,char *,int)" (?GetWindowTextA@@$$J212YGHPAUHWND__@@PADH@Z) référencé dans la fonction "private: void __clrcall appli::Form1::ButEnv_Click(class System::Object ^,class System::EventArgs ^)" (?ButEnv_Click@Form1@appli@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    appli.obj : error LNK2019: symbole externe non résolu "extern "C" struct HWND__ * __stdcall FindWindowA(char const *,char const *)" (?FindWindowA@@$$J18YGPAUHWND__@@PBD0@Z) référencé dans la fonction "private: void __clrcall appli::Form1::ButEnv_Click(class System::Object ^,class System::EventArgs ^)" (?ButEnv_Click@Form1@appli@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    Je retrouve mes anciennes erreurs

    Ce que je comprends pas, c'est que lorsque je n'utilise pas FindWindow, j'ai juste un message d'erreur comme quoi GetWindowText n'a pas le bon paramètre en argument (logique, puisque Handle n'est pas defini). Les erreurs LNK2028 et 2019 apparaissent quand je veux récupérer le Handle.
    GetWindowText et FindWindow utilisent les même fichiers, je ne vois pas pourquoi je n'ai pas ces erreurs dans les deux cas du coup.

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Il me semble avoir lu quelque part que les versions Express ne linkent pas automatiquement les bibliothèques comme USER32 et GDI32, il faut le lui demander explicitement.

    Toutes ces fonctions sont "définies" dans USER32.LIB.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Il suffit que je copie USER32 et GDI32 dans le dossier qui contient mon projet et que je l'indique ensuite dans Visual alors?

    (je ne pourrais essayer que lundi maintenant, je croise les doigts d'ici là!)

    Une nouvelle fois, merci de passer du temps pour me fournir des pistes et de l'aide!

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Tu n'as rien à copier, tu dois juste rajouter leurs noms aux options d'édition de lien de ton projet.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    C'était bien ça, merci!

    Mais c'est assez bizarre quand même parce qu'avant d'ajouter USER32.lib, j'ai regardé les fichiers qui été déjà appelé et il y était déjà. Je l'ai quand même ajouté et les erreurs n'apparaissent plus. Je ne vais pas m'en plaindre mais c'est assez troublant...

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    J'ai terminé mon code, tout fonctionne parfaitement!
    Je l'ai certainement codé salement mais je reviendrai dessus dans quelques temps pour le peaufiner et qu'il ressemble à quelque chose...

    Merci beaucoup pour le coup de main

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

Discussions similaires

  1. Error LNK 2019
    Par Alwik dans le forum C
    Réponses: 2
    Dernier message: 12/01/2011, 09h34
  2. Réponses: 1
    Dernier message: 30/08/2010, 13h15
  3. Erreur LNK 2019 sous Visual C++
    Par mulfycrowh dans le forum C++
    Réponses: 1
    Dernier message: 14/08/2009, 09h59
  4. Error lnk 2019
    Par xavDIP dans le forum C++
    Réponses: 3
    Dernier message: 31/01/2007, 00h06
  5. error LNK 2019... comprends pas pourquoi ?
    Par MonsieurAk dans le forum MFC
    Réponses: 2
    Dernier message: 29/04/2005, 16h06

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