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 :

Utiliser une DLL externe à Qt


Sujet :

Qt

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Utiliser une DLL externe à Qt
    Bonjour, je dois créer un programme utilisant une DLL que m'a fourni une société.
    Je n'ai pas de .h ni de .cpp
    Je tente d'utiliser les fonctions se trouvant dans cette DLL via Qlibrary mais en vain.
    Mon programme à l'air de trouvé la DLL et d'entrer dedans mais n'arrive pas à trouver les fonctions proprement dites.
    Extrait de la dll en question :

    Nom : Sans titre 1.jpg
Affichages : 447
Taille : 19,2 Ko

    J'arrive à appeler les 2 fonctions de type "exported" mais pas celles du type "method com".
    Quelqu'un aurait une solution ?

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    Par rapport à votre question, je ne pense pas que vous puissiez y accéder vu que les symboles ne sont justement pas exportés. Je ne sais pas si vous avez quelques connaissances dans le domaine, mais quand on code ceci (je n'ai pas mis de __stdcall, pars du principe que vous codez avec un g++ classique sur Linux) :

    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
    class A
    {
    public:
        void doWork()
        {
            // ...
        }
    };
     
    extern "C"
    {
        void doSomething()
        {
            A instance;
            a.doWork();
        }
    }
    La fonction doSomething() sera récupérable via le symbole "doSomething" via QLibrary, mais pas A::doWork, vu que le compilateur procède sur A::doWork a ce qu'on appelle du name mangling (http://en.wikipedia.org/wiki/Name_mangling) qui empêche de savoir précisément le nom du symbole.

    Bon courage à vous,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Effectivement j'ai pu récupérer les 2 fonctions exportées via QLibrary. Ce sont les autres qui me pose problème.
    Aucun moyen de les récupérer ?

  4. #4
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    En voyant l'aspect des symboles, j'aurais tendance à dire qu'il faut utiliser le DllGetClassObject pour récupérer une instance de la classe concernée qui permettra probablement d'accéder d'une manière ou d'une autre aux autres méthodes. En général, il y a toujours un fichier .h de description à côté des dll qui permet de savoir comment caster le pointeur sur fonction reçu par QLibrary ou équivalent et ainsi faire ce que vous souhaitez. La fonction DllUnloadNow prend probablement en paramètre cette instance pour libérer la mémoire. De là, je ne peux pas supposer plus de choses.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je vous remercie, je vais essayé avec ça.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    C'est une dll COM?

Discussions similaires

  1. utiliser une DLL externe
    Par Ceddoc dans le forum Débuter
    Réponses: 10
    Dernier message: 13/12/2011, 13h07
  2. [WD12] Utilisation d'une dll externe
    Par rems033 dans le forum WinDev
    Réponses: 4
    Dernier message: 10/12/2009, 15h07
  3. [WD12] utiliser une DLL externe
    Par yann_72 dans le forum WinDev
    Réponses: 8
    Dernier message: 31/07/2008, 10h12
  4. Probleme d'utilisation d'une DLL externe
    Par Pasiphae dans le forum C++/CLI
    Réponses: 2
    Dernier message: 19/02/2007, 16h17
  5. dll ActiveX utilisant une DLL externe
    Par Metal3d dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/11/2005, 19h02

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