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

Qt Discussion :

Intégrer une bibliothèque dans un projet sans le .h


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Points : 22
    Points
    22
    Par défaut Intégrer une bibliothèque dans un projet sans le .h
    Voila mon problème, j'ai réalisé une application de connexion sur un serveur distant (facile).
    Maintenant, je voudrais que la personne ce connecte passe une carte à puce dans un boitier, puis je transfererai les informations de cette carte a mon serveur qui donnera son aval ou non pour la connexion. Dans le principe c'est assez simple mais mon problème c'est que j'ai récupéré une librairie pour connecter et récuperer des informations sur mes cartes a puces mais impossible de lancer ces fonctions.
    Les fichiers que j'ai en ma possession sont:
    - une doc décrivant les fonctions (et paramètres attendus) et les classes présent dans la librairie
    - la librairie cpsw32.lib
    - et une dll cpsw32.dll
    Comment faire pour utiliser les fonctions et classes de ces fichiers pour faire fonctionner mon application.

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Si tu connais le prototype des fonctions que tu souhaites appeller tu peux utiliser ça avec Qt :
    http://developer.qt.nokia.com/doc/qt-4.8/qlibrary.html

    Sinon tu peux utiliser directement l'API de l'OS que tu utilises.
    En l’occurrence je pense Windows avec ceux-ci:
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Points : 22
    Points
    22
    Par défaut
    Merci de ta réponse mais j'ai un autre problème. Si je prend ta méthode, je peut lancer des fonctions et récupérer des codes retour mais certaines d'entre elles attendent en paramètre des classes se trouvant dans la dll

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CPS_OuvertureSession( PSTRG   pNomRessource,
                                           PSTRG   pNomAppli,
                                           struct  CPS_StatusService PTR pStatusService,
                                           PUINT16 pNumSession,
                                           PUINT8  pFU);
    PSTRG = QString
    PUINT16 = uint16_t
    PUINT8 = uint8_t

    truct CPS_StatusService ??? est une classe se trouvant dedans qui a la forme suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* Structure contenant au retour l'ensemble des status de l'API */
    typedef struct CPS_StatusService {
           UINT16  NumVersionAPIs;                /* numero de version des APIs */
           UINT16  NumVersionAPI;                 /* numero de version du service */
           UINT16  NumAPI;                          /* numero du service API */
           UINT16  StatusAPI;                      /* code retour de l'API */
           UINT16  StatusGestionnaire;         /* resultat d’execution des fonctions du Gestionnaire. */
           UINT16  StatusInterne;              /* etape interne du service */
           UINT16  StatusLecteur;            /* Code retour lecteur */
           UINT16  StatusCarte;              /* Status Carte ME1-ME2 */
      } CPS_StatusService;
    Donc comment faire pour initialiser cette classe avec ta QLibrairy

  4. #4
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Tu refais un .h ou tu définis cette structure comme dans le code que tu propose et normalement tout devrais fonctionner.

    Pour info je ne pense pas que PSTR = QString mais bon peut etre a toi de me le dire...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Points : 22
    Points
    22
    Par défaut
    Merci pour ton aide, donc je fais un .h et include ma lib dans le fichier .pro

    Maintenant, j'ai un nouveau problème qui est le suivant: Je veux lancer la fonction CPS_OuvertureSession

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    uint16_t CPS_OuvertureSession(QString   pNomRessource,
                                           QString   pNomAppli,
                                           CPS_StatusService pStatusService,
                                           uint16_t pNumSession,
                                           uint8_t pFU);
    Et la structure CPS_StatusService ce situe aussi dans le fichier .h de la librairie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct CPS_StatusService {
      uint16_t  NumVersionAPIs;     /* numero de version des APIs */
      uint16_t  NumVersionAPI;      /* numero de version du service */
      uint16_t  NumAPI;             /* numero du service API */
      uint16_t  StatusAPI;          /* code retour de l'API */
      uint16_t  StatusGestionnaire; /* resultat d’execution des fonctions du Gestionnaire. */
      uint16_t  StatusInterne;      /* etape interne du service */
      uint16_t  StatusLecteur;      /* Code retour lecteur */
      uint16_t  StatusCarte;        /* Status Carte ME1-ME2 */
      } CPS_StatusService_t;

    Mais lorsque je veux effectuer cette fonction, je dois créer une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CPS_SituationPS pStatusService = new CPS_SituationPS();
    Puis faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uint16_t cps_session = CPS_OuvertureSession(NomRessource, NomAppli, pStatusService, numsession, numLAD);
    Mais j'ai un retour d'erreur suivant :

    conversion from 'CPS_SituationPS*' to non-scalar type 'CPS_SituationPS' requested

    Une petite idée ???
    Merci déjà de votre aide

  6. #6
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Ça saute aux yeux, tu as oublié une * à la déclaration du pointeur.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Points : 22
    Points
    22
    Par défaut Désolé
    Oui je suis bête. J'avais corriger mon erreur même pas une heure après mais la, j'ai une nouvelle erreur qui vient je pense que ma librairie n'est "loader" (si je peux utiliser cette expression), l'erreur est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    undefined reference to 'CPS_OuvertureSession(QString, QString, CPS_StatusService, unsigned short, unsigned char)'
    Collext2: Id returned 1 exit status
    Je rappelle quelque informations :
    - Je travaille avec Qt Creator
    - j'utilise une librairie en .lib et .h fait par mes soins mes qui est correct car reprit dans la doc

    J'ai vu dans d'autre tuto que .lib n'est pas prit en compte par qt seulement de .a

  8. #8
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Comme déjà dis je ne pense pas que le type PSTRG soit compatible QString.

  9. #9
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 667
    Points : 188 680
    Points
    188 680
    Par défaut
    Citation Envoyé par Vlad35 Voir le message
    J'ai vu dans d'autre tuto que .lib n'est pas prit en compte par qt seulement de .a
    !? Où ça ? Il faut encore égorger quelqu'un ? C'est une affaire de linker, pas de framework utilisé ! Si tu utilises GCC & co., ça ne fonctionnera pas direct, il faudra en effet convertir le fichier d'import en quelque chose de compréhensible par les outils GNU. Si tu utilises VC, c'est son format chéri.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Points : 22
    Points
    22
    Par défaut Merci !
    Merci pour votre aide cela marche impect !!!
    Mais j'aurais besion de vos lumière encore une fois. Voici le petit problème :
    J'ai un tableau de uint8_t et je voudrais recupérer ces données sous forme de string.

    Voici ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QString idEmetteur = "";
    for (int i=0;i<11;i++) {
         idEmetteur += (char)pIC.Emetteur[i];
    }
    Le tableau est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Emetteur
         [0]   =   56
         [1]   =   48
         [2]   =   50
    ...
         [10]   =   55
    Ce que je veux récupérer c'est ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idEmetteur = "80250000017"
    car 56 = 8 en CodeASCII

    Et le problème c'est que ca marche 1/10. Et que juste 5 ligne au-dessus de ce code il se trouve la même fonction pour un autre tableau se trouvant dans pIc aussi et là cela marche a chaque fois.

    [Edit]
    PS : superjaja tu avais raison pour PSTRG cest pas exactement un QString mais un const char *. Donc j'ai transformer ma valeur grace : NomRessource.toStdString().c_str()

  11. #11
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Vlad35 Voir le message
    PS : superjaja tu avais raison pour PSTRG cest pas exactement un QString mais un const char *. Donc j'ai transformer ma valeur grace : NomRessource.toStdString().c_str()
    Petit conseil, parce que je faisais la même chose avant et que c'est une erreur : il vaut mieux utiliser NomRessource.toAscii().constData() . En effet, si tu regardes le code de toStdString() dans Qt, tu verras que Qt convertit en std::string en passant par toAscii().constData(), puis ensuite avec c_str() tu redemandes le char* (donc la création du std::string est inutile).

    Pour ta question, essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QString idEmetteur = "";
    for (int i=0;i<11;i++) {
         idEmetteur += QString ( QChar ( pIC.Emetteur[i] ) );
    }
    Voir la classe QChar.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Points : 22
    Points
    22
    Par défaut Merci pour votre aide
    Merci à vous pour votre aide si précieuse.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/04/2015, 00h16
  2. Intégrer une dll dans un projet VB.NET
    Par Nijin dans le forum Accès aux données
    Réponses: 2
    Dernier message: 19/04/2014, 02h33
  3. intégrer une bibliothèque dans un IDE
    Par Akramou dans le forum C++
    Réponses: 3
    Dernier message: 29/02/2012, 07h26
  4. Réponses: 0
    Dernier message: 25/05/2011, 16h53
  5. Réponses: 1
    Dernier message: 28/01/2011, 12h11

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