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

Visual C++ Discussion :

Charger dll dynamique pour utilisation de ses classes


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 34
    Par défaut Charger dll dynamique pour utilisation de ses classes
    Bonsoir,

    J'ouvre ce sujet car je rencontre un problème pour "intégrer" des dll au sein d'un projet de type Application Console sous Visual C++ 6.0.
    J'ai donc à disposition 4 fichiers .dll (aucun .lib, aucun .h). C'est la première fois que j'intègre des librairies dynamiques au sein d'un projet et ça ne va pas comme je le souhaite.

    Pour les intégrer, je les ai ajouter à mon projet et je tente de les importer par le code suivant pour pouvoir ensuite utiliser les classes contenues dans les dll dans mon projet VC++.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #define DllImport	__declspec( dllimport )
    //Importation de la librairie CMicroBot_1-1.dll
    class DllImport CMicroBot_1_1{
    public :
    	CMicroBot_1_1(); // Constructeur de la classe CMicroBot_1_1 contenue dans la dll
    	virtual short OpenConnection(); // Méthode de la classe CMicro_1_1 contenue dans la dll
    	virtual short CloseConnection(); // idem
    };
    Je n'ai pas utilisé LoadLibrary et GetProcAdress car de ce que j'ai compris, ceci permet juste de faire le lien avec les fonctions et non pas avec les classes contenues dans les dll.

    Le problème est que lorsque que j'instancie l'objet de type CMicrobot_1_1 avec le code ci-dessous (Bot.cpp) j'ai une erreur qui me dit qu'il est impossible de convertir le type 'CMicroBot_1_1' en '*CMicroBot_1_1'.
    Je n'ai pas l'impression que l'instanciation se fasse correctement et que le constructeur soit vraiment "pris en compte".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Bot::Bot()
    {	
    	CMicroBot_1_1 myRobot = new CMicroBot_1_1();
    	myRobot.OpenConnection();
    }
    Est-ce je procède bien de la bonne manière ou dois-je procéder autrement pour pouvoir utiliser les classes des dll ?

    Cordialement,
    Tehko

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Peut être un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMicroBot_1_1 * myRobot = new CMicroBot_1_1();
    new retourne un pointeur alloué sur la classe
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 34
    Par défaut
    L'erreur est résolue mais une autre survient à la ligne suivante.

    J'ai ceci :
    Bot.cpp(4) : error C2228: left of '.OpenConnection' must have class/struct/union type

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Tehko Voir le message
    L'erreur est résolue mais une autre survient à la ligne suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myRobot->OpenConnection();
    On va pas passer toutes les lignes une par une. Tu te doutes bien que si on transforme une déclaration de objet plein à pointeur, les appels aux fonctions membres sont un peut modifiés. Un peu d'initiative et de compréhension dans le code tout de même.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Attention, il n'y a pas de garantie de compatibilité pour les classes C++ si la DLL ne provient pas exactement du même compilateur. C'est pour cette raison qu'on tend à utiliser des interfaces (souvent des interfaces COM) à la place.
    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.

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/07/2010, 17h05
  2. Charger dll dynamiquement
    Par NeoKript dans le forum C#
    Réponses: 8
    Dernier message: 27/06/2009, 16h45
  3. DLL : charger dynamiquement et utiliser les classes
    Par italiasky dans le forum C++
    Réponses: 6
    Dernier message: 29/11/2008, 02h42
  4. DLL Delphi pour utilisation sous C++ Builder
    Par kurul1 dans le forum Langage
    Réponses: 8
    Dernier message: 25/06/2008, 10h54
  5. Réponses: 1
    Dernier message: 30/06/2006, 15h49

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