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

C++ Discussion :

[ DLL C++ ] Cr�ation et utilisation d'une DLL de classe c++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    33
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Par d�faut [ DLL C++ ] Cr�ation et utilisation d'une DLL de classe c++
    Bonjour � tous.

    Je suis confront� � un probl�me de dll depuis quelque temps. Je cherche � cr�er une dll sous visual studio.
    Je doit faire un code g�n�rique en code c++ non manag� que je doit ensuite importer dans un projet c++ manag�

    Pour ce faire, voila ce que j'ai fait :

    Je cr�e donc un projet win32 --> dll -> projet vide.
    Je cr�e une classe tr�s simple :

    Voici mon fichier Calculette.h
    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
    18
    19
    20
     
    #pragma once
    #include <iostream>
    #include <string>
    using namespace std;
     
    extern "C" class __declspec(dllexport) Calculette
    {
     
    private:
    	double PI;
     
    public:
    	Calculette(void);
    	~Calculette(void);
     
    	int addition(int nbA, int nbB);
    	double addPI(double nb);
    	int soustraction(int nbA, int nbB);
    };
    Voici mon fichier Calculette.cpp
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #include "Calculette.h"
     
     
    Calculette::Calculette(void)
    {
    	this->PI = 3.14;
    }
     
     
    Calculette::~Calculette(void)
    {
    }
     
     
    int Calculette::addition(int nbA, int nbB)
    {
    	return nbA + nbB;
    }
     
    double Calculette::addPI(double nb)
    {
    	return nb + this->PI;
    }
     
    int Calculette::soustraction(int nbA, int nbB)
    {
    	return nbB - nbA;
    }
    Ensuite j'ajoute � ma solution un nouveau projet de type console CLR ( Code manag� ).
    Je copie la .dll ainsi que le fichier .lib g�n�r� par la compilation de ma dll � la source du projet.
    Ensuite je place le code suivant :


    Voici le fichier TestConsoleClass.cpp
    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
    18
    19
    20
    21
    22
    23
     
    // TestConsoleClass.cpp : main project file.
     
    #include "stdafx.h"
     
    using namespace System;
     
    // Importation des éléments de ma DLL
    #pragma comment (lib, "FirstClassDll.lib")
    extern "C" class __declspec(dllexport) Calculette;
     
    int main(array<System::String ^> ^args)
    {
        Console::WriteLine(L"Lancement du programme");
     
    	// Calcul simple et écriture dans la console du résulat
    	Calculette calc = new Calculette();
    	int resultat = calc->addition(2,3);
    	Console::WriteLine(resultat);
     
    	Console::ReadLine();
        return 0;
    }
    J'essai ensuite de compiler le programme et voila ce que j'obtient comme erreur :

    1 error C2079 'calc' uses undefined class 'Calculette'
    2 error C2512 'Calculette': no appropriate default constructor available
    3 error C2227 left of '->addition' must point to class/struct/union/generic type

    Je pense que le probl�me viens du faite qu'il n'importe pas la classe comme il faudrait. J'ai vue sur internet apr�s plusieurs recherche qu'il y a plusieurs solutions pour utiliser les dll. J'ai choisi d'opter pour la solution des __declspec(dllexport) qui est plus simple � impl�menter.


    Je vous remerci d'avance pour toute l'aide que vous pourrez m'apporter.

  2. #2
    Membre exp�riment�

    Inscrit en
    Mai 2005
    Messages
    132
    D�tails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Par d�faut
    Salut,

    a mon avis ton compiler ne sait rien de Calculette dans TestConsoleClass.cpp. Quand tu veux utiliser une class, tu dois dire au compiler toute la definition de la class avec

    #include "Calculette.h"

    (... je pense :-) )

    Bonne chance. Fredy

  3. #3
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    C'est �a le bug. Il faut l'en-t�te obligatoirement.

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Aussi, j'ai du mal � comprendre le coup de mettre une classe C++ en extern "C"...
    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.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    33
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Par d�faut Information
    Merci pour les r�ponses. Je test sa ce soir et je vous tient au courant.


    Le extern C �tais la juste pour faire un test. Je ne pense pas qu'il soit n�cessaire.
    Si je l'ai mit, c'est qu'il est utilis� pour faire des exports de fonction C lorsqu'on utilise des dll.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    33
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Par d�faut Test
    J'ai tester une compilation en retirant le extern C, cela ne change rien.

    En ce qui concerne l'inclusion du fichier header de la classe, il ne faut pas oublier que je n'ai pas acc�s aux fichiers sources mais � une dll contenant l'ensemble de mon code compiler.

    J'ai quand m�me fait le test, mais il me dit qu'il ne trouve pas le fichier header, ce qui parait logique.

    Si vous avez d'autre proposition je suis ouvert � toute les id�es.

Discussions similaires

  1. R�ponses: 27
    Dernier message: 29/08/2014, 12h29
  2. Cr�ation et utilisation d'une DLL
    Par Dereck07 dans le forum D�buter
    R�ponses: 3
    Dernier message: 03/05/2010, 23h39
  3. cr�ation et utilisation d'une dll .net
    Par r83 dans le forum C#
    R�ponses: 2
    Dernier message: 08/10/2008, 16h13
  4. R�ponses: 8
    Dernier message: 20/06/2008, 09h00

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