Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > Qt
Qt Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2012, 10h36   #1
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : mars 2011
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Russie

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

Informations forums :
Inscription : mars 2011
Messages : 26
Points : 3
Points : 3
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.
Vlad35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 13h35   #2
Rédacteur
 
Inscription : novembre 2006
Messages : 1 260
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 260
Points : 1 198
Points : 1 198
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
__________________
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 14h05   #3
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : mars 2011
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Russie

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

Informations forums :
Inscription : mars 2011
Messages : 26
Points : 3
Points : 3
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 :
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 :
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
Vlad35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 16h01   #4
Rédacteur
 
Inscription : novembre 2006
Messages : 1 260
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 260
Points : 1 198
Points : 1 198
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...
__________________
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 11h45   #5
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : mars 2011
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Russie

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

Informations forums :
Inscription : mars 2011
Messages : 26
Points : 3
Points : 3
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 :
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 :
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 :
CPS_SituationPS pStatusService = new CPS_SituationPS();
Puis faire :

Code :
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
Vlad35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 22h29   #6
Modérateur
 
Homme
Ingénieur développement logiciels
Inscription : mai 2009
Messages : 572
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France

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

Informations forums :
Inscription : mai 2009
Messages : 572
Points : 914
Points : 914
Ça saute aux yeux, tu as oublié une * à la déclaration du pointeur.
Troudhyl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 10h00   #7
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : mars 2011
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Russie

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

Informations forums :
Inscription : mars 2011
Messages : 26
Points : 3
Points : 3
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 :
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
Vlad35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 17h12   #8
Rédacteur
 
Inscription : novembre 2006
Messages : 1 260
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 260
Points : 1 198
Points : 1 198
Comme déjà dis je ne pense pas que le type PSTRG soit compatible QString.
__________________
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 19h56   #9
Responsable Qt & Web sémantique

 
Avatar de dourouc05
 
Homme Thibaut Cuvelier
Étudiant
Inscription : août 2008
Messages : 16 323
Détails du profil
Informations personnelles :
Nom : Homme Thibaut Cuvelier
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : août 2008
Messages : 16 323
Points : 49 932
Points : 49 932
Envoyer un message via MSN à dourouc05 Envoyer un message via Yahoo à dourouc05
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.
__________________
Le troisième défi Qt !

Vous souhaitez participer aux rubriques Qt ou PyQt/PySide (tutoriels, FAQ, traductions, sources) ? Contactez-moi par MP.

Qt : La FAQ : 200 QR
symfony : sfDoctrineGuard

Pas de question d'ordre technique par MP !
dourouc05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 17h06   #10
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : mars 2011
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Russie

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

Informations forums :
Inscription : mars 2011
Messages : 26
Points : 3
Points : 3
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 :
1
2
3
4
QString idEmetteur = "";
for (int i=0;i<11;i++) {
     idEmetteur += (char)pIC.Emetteur[i];
}
Le tableau est le suivant :
Code :
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 :
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()
Vlad35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 22h09   #11
Modérateur
 
Homme
Ingénieur développement logiciels
Inscription : mai 2009
Messages : 572
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France

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

Informations forums :
Inscription : mai 2009
Messages : 572
Points : 914
Points : 914
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 :
1
2
3
4
QString idEmetteur = "";
for (int i=0;i<11;i++) {
     idEmetteur += QString ( QChar ( pIC.Emetteur[i] ) );
}
Voir la classe QChar.
Troudhyl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 15h09   #12
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : mars 2011
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Russie

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

Informations forums :
Inscription : mars 2011
Messages : 26
Points : 3
Points : 3
Par défaut Merci pour votre aide

Merci à vous pour votre aide si précieuse.
Vlad35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h10.


 
 
 
 
Partenaires

Hébergement Web