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 :

Déclarer un objet avec QLibrary


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 7
    Par défaut Déclarer un objet avec QLibrary
    Bonjour à tous !

    Je viens de m'inscrire et je vous remercie d'avance pour votre aide (parce que je sais que vous êtes tous gentil et que vous allez m'aider, vous êtes trop forts )

    Voici mon problème: dans le cadre d'un projet, je dois utiliser une dll qui contient plusieurs objets et dont ces objets ont des fonctions qui leur sont propre (des classes quoi). Seulement, je n'ai que cette dll, pas de lib, pas d'include .... rien. Du coup, en cherchant sur les forums, j'ai trouvé QLibrary.

    J'arrive à télécharger la librairie (enfin à l'importer) mais je ne sais pas comment créer un objet pour appeler ses fonction. Voici ce que j'ai fait :

    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
     
    QLibrary *lib;
    lib=new QLibrary("IntegMotorInterface");
    lib->load();
    if(lib->isLoaded()){
        QmessageBox *mess;
        mess=new QmessageBox();
        mess->setText("fonctionne");
        mess->show();
    }
    else{
        QmessageBox *mess;
        mess=new QmessageBox();
        mess->setText("fonctionne pas");
        mess->show();
    }
    Ca, ça fonctionne, j'ai bien mon message "fonctionne".

    J'ai aussi trouvé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef void (*MyPrototype)();
    MyPrototype myFunction =(MyPrototype) QLibrary::resolve("mylib", mysymbol");
    if (myFunction){
         myFunction();
    }
    mais je ne sais pas comment l'adapter pour créer une instance d'un objet (par exemple SMIHost).


    Le fichier IntegMotorInterface.dll a été écrit avec MSVC C++ 2005. J'utilise Qt creator avec le comilateur MSVC 2010.

    Des idées ?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Sans les .h pour retrouver les définitions des classes/structures, cela peut être légèrement compliqué. Toutefois, avec le resolve, vous devriez être capable de récupérer toutes les fonctions disponible dans votre bibliothèque.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 7
    Par défaut
    Merci pour ta réponse. Je n'ai pas les .h mais j'ai une documentation assez bien faite avec le détail des fonctions et des objets.

    J'ai vu que l'on pouvez utiliser la fonction "resolve" mais qu'elle ne marchait pas si la dll a été écrite en c++, ce qui est mon cas.

    En fait, dans cette dll il est sensé y avoir 3 objets, donc 3 classes, avec pour chaque objet des fonctions qui lui sont propre. QLibrary permet de résolver une fonction mais pour un objet ? Comment ça se passe ? C'est là que je bloque.

    Merci pour vos réponses.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Si vous avez une documentation, celle-ci devrait vous expliquer comment utiliser la DLL, non ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 7
    Par défaut
    J'ai du nouveau concernant les sources. Maintenant je dispose de ça :
    - IntegMotorInterface.dll
    - IntegMotorInterface.h
    - IntegMotorInterface.tlb

    Comme vous pouvez le deviner, c'est pour utiliser un port com qui gèrera un moteur. C'est la première foie que je voie un fichier .tlb.

    Voila ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "IntegMotorInterface.h"
    #import "IntegMotorInterface.tlb"
     
    int main(int argc, char** argv){
     
        SMIMotor moteur;
        SMIHost host;
     
    }
    SMIMotor et SMIHost sont 2 objets normalement présent dans la dll (ou tlb).

    J'essaie de faire des recherches pour voir comment fonctionne les .tlb mais je ne trouve pas grand chose. Donc si vous trouvez en plus un tuto pour débutant pour les .tlb (première fois que je voie les .tlb et que j'utilise un port com !) ce serait cool.

    En revanche, il me met une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'moteur' utilise une classe 'SMIMoteur' non définie.
    'host' utilise une classe 'SMIHost' non définie.
    Est ce que il me manque un .h ou .dll ?

    Merci

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Je ne sais pas ce que sont les fichiers TLB. Que contient t-il ? (toujours pas de documentation ?)

    Par contre, il vous manque un fichier .lib (ou .a) qu'il faut lier (option de l'éditeur de lien) à votre programme afin que le compilateur trouve le code à exécuter lorsque vous appelez telle ou telle fonction.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. Déclarer un objet avec Visual Studio 2010
    Par JeanNoel53 dans le forum C++/CLI
    Réponses: 17
    Dernier message: 03/05/2012, 12h27
  2. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  3. Réponses: 3
    Dernier message: 22/12/2005, 00h40
  4. nommer un objet avec une variable
    Par fatcat dans le forum C++
    Réponses: 4
    Dernier message: 11/12/2005, 16h16
  5. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22

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