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 :

creation dll a partir d une classe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 197
    Par défaut creation dll a partir d une classe
    Bonjour à tous,


    depuis des années je programme dans differents langages et j'avais toujours repoussé l'apprentissage de c++ au lendemain.
    Je viens de reecrire une classe python, que j'avais codé, en c++ tant bien que mal. Le but etant de faire une dll pour l'utiliser par une application externe (windev)

    Je coince à la creation de ma DLL sous codeblocks, je m'explique:

    j'ai crée ma classe "memfile" (il y a memfile.h et memfile.cpp)
    Avec Codeblocks, je démarre un projet DLL où j'obtiens 2 fichiers : main.h et main.cpp
    dans le dossier du projet, je mets les 2 fichiers de ma classe memfile.
    Voici le main.h de la DLL :
    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
    30
    31
    32
    33
    34
    35
     
    #ifndef __MAIN_H__
    #define __MAIN_H__
     
    #include <windows.h>
    #include "memfile.h"
     
     
    memfile m;
     
     
     /*  To use this exported function of dll, include this header
     *  in your project.
     */
     
    #ifdef BUILD_DLL
        #define DLL_EXPORT __declspec(dllexport)
    #else
        #define DLL_EXPORT __declspec(dllimport)
    #endif
     
     
    #ifdef __cplusplus
    extern "C"
    {
    #endif
     
     
     
     
    void DLL_EXPORT SomeFunction(const LPCSTR sometext);
     
    #ifdef __cplusplus
    }
    #endif
    Le probleme vient à la compilation : j'obtiens toujours un fichu "undefined reference to `memfile::memfile()'
    Ca fait des heures que je cherche.. ca viendrait d'un probleme de link....
    Je me suis mis sous "debug" ou "release" ca change rien, c'est la galère!

    merci à celui/celle qui peut m'eclairer

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    C'est probablement que le constructeur par défaut n'est pas défini dans memfile.cpp :
    MemFile::MemFile() {
    ... corps du constructeur ...
    }
    Au fait, à quoi sert cette variable globale "m" dans main.h ?
    D'ailleurs, à quoi sert main.h ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 197
    Par défaut
    merci de me répondre, toute aide est bienvenue

    dans memfile.cpp, j'ai bien un constructeur (vide) :

    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
    30
    31
    32
    33
    34
    35
    36
    37
     
    #include "memfile.h"
    #include <sstream>
    #include <stdio.h>
    #include <iostream>
    #include <math.h>
     
     
    using namespace std;
     
    char buf[5000];
    char r_close[32] = {16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,
                        0,0,5,0,0,121,1,0,0,0,0,0,0,0,0,0};
    char r_next[32] = {0,16,32,0,0,0,0,0,0,0,0,0,0,0,0,0,
                       0,0,14,0,0,6,4,1,160,15,0,0,0,0,0,0};
    char r_read[32] = {0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                       0,0,12,0,0,7,4,1,160,15,0,0,0,0,0,0};
    char r_delet[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                        0,0,18,0,0,0,0,1,0,0,0,0,0,0,0,0};
    char r_zero[32] = {10,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,
                        0,0,17,0,0,0,0,1,0,0,0,0,0,0,0,0};
    char r_update[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                        0,0,11,0,0,1,0,1,0,0,0,0,0,0,0,0};
    char r_write[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                        0,0,9,0,0,1,0,0,0,0,0,0,0,0,0,0};
    char r_born[32] = {16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,
                        0,0,17};
     
     
    memfile::memfile() {}
     
    void memfile::connex(string serveur,int port)
    {
        WSADATA WSAData;                                        // SOCKET
        SOCKADDR_IN sin;
        WSAStartup(MAKEWORD(2,0), &WSAData);
        sin.sin_addr.s_addr = inet_addr(serveur.c_str()
    La variable globale m (nom provisoire..) va me servir pour utiliser ma classe memfile.
    main.h a été crée par codeblocks lors de la creation de mon projet DLL.

    tout ca est nouveau pour moi


  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    si ta DLL exporte une classe et la possibilité de créer cette classe avec l'application qui l'utilisera, que fout une variable globale (mal déclarée) dedans ?
    Ta DLL ne devrait que fournir la class et les fonctions correspondantes, pas d'instance de la classe.

    L'erreur indique que le constructeur par défaut n'est pas déclaré. Oubli de prototype dans le header surement ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 197
    Par défaut
    Bonjour,

    bien j'en sais rien msieur! me grondez pas!
    J'etais bien content d'avoir crée ma classe.

    le simple but est de l'utiliser via une dll, si tu as un exemple minimaliste à me proposer je suis preneur!
    je voulais simplement utiliser la classe deja faite dans mon projet de dll.
    Peut etre en "copiant" mon code de la classe dans la dll, ca irait..

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Si le but est d'exporter la classe, tu exposes la classe, et non une instance de la classe.

    Pour plus d'informations pour exporter une classe en dll, ça marche de la même manière que pour une fonction simple.
    http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
    http://www.codeproject.com/Articles/...ses-from-a-DLL
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Réponses: 26
    Dernier message: 09/07/2006, 17h42
  2. Réponses: 1
    Dernier message: 22/06/2006, 09h17
  3. Réponses: 6
    Dernier message: 21/05/2006, 20h37
  4. Réponses: 12
    Dernier message: 03/11/2005, 18h45
  5. [DLL] utiliser une DLL a partir d' une DLL et un .def
    Par venomelektro dans le forum MFC
    Réponses: 9
    Dernier message: 07/12/2004, 14h01

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