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

MFC Discussion :

[Debutant]Créer une DLL MFC ?


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2006
    Messages : 238
    Points : 103
    Points
    103
    Par défaut [Debutant]Créer une DLL MFC ?
    Bonjour,
    je travail sur Visual C++, j'ai essayer de créer une DLL MFC dans je veux insérer une fonction de somme voici mon code:
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    // dll2.cpp : Defines the initialization routines for the DLL.
    //
     
    #include "stdafx.h"
    #include "dll2.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
     
    //
    //	Note!
    //
    //		If this DLL is dynamically linked against the MFC
    //		DLLs, any functions exported from this DLL which
    //		call into MFC must have the AFX_MANAGE_STATE macro
    //		added at the very beginning of the function.
    //
    //		For example:
    //
    //		extern "C" BOOL PASCAL EXPORT ExportedFunction()
    //		{
    //			AFX_MANAGE_STATE(AfxGetStaticModuleState());
    //			// normal function body here
    //		}
    //
    //		It is very important that this macro appear in each
    //		function, prior to any calls into MFC.  This means that
    //		it must appear as the first statement within the 
    //		function, even before any object variable declarations
    //		as their constructors may generate calls into the MFC
    //		DLL.
    //
    //		Please see MFC Technical Notes 33 and 58 for additional
    //		details.
    //
     
    /////////////////////////////////////////////////////////////////////////////
    // CDll2App
     
    BEGIN_MESSAGE_MAP(CDll2App, CWinApp)
    	//{{AFX_MSG_MAP(CDll2App)
    		// NOTE - the ClassWizard will add and remove mapping macros here.
    		//    DO NOT EDIT what you see in these blocks of generated code!
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    /////////////////////////////////////////////////////////////////////////////
    // CDll2App construction
     
    CDll2App::CDll2App()
    {
    	// TODO: add construction code here,
    	// Place all significant initialization in InitInstance
     
    int _stdcall somme(int x , int y)
    {
        return x+y;
    } 
     
    }
     
    /////////////////////////////////////////////////////////////////////////////
    // The one and only CDll2App object
     
    CDll2App theApp;
    j'ai ce message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Deleting intermediate files and output files for project 'dll2 - Win32 Debug'.
    --------------------Configuration: dll2 - Win32 Debug--------------------
    Compiling resources...
    Compiling...
    StdAfx.cpp
    Compiling...
    dll2.cpp
    D:\Program Files\Microsoft Visual Studio\MyProjects\dll2\dll2.cpp(59) : error C2601: 'somme' : local function definitions are illegal
    Error executing cl.exe.
     
    dll2.dll - 1 error(s), 0 warning(s)
    je ne trouve pas la solution et je ne comprend pas comment procéder avec ce type de projet !!!

    Merci les amis pour votre aide

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CDll2App::CDll2App()
    {
    	// TODO: add construction code here,
    	// Place all significant initialization in InitInstance
     
    int _stdcall somme(int x , int y)
    {
        return x+y;
    } 
     
    }

    devrait pas etre ca plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CDll2App::CDll2App()
    {
    	// TODO: add construction code here,
    	// Place all significant initialization in InitInstance
    }
    
    int _stdcall somme(int x , int y)
    {
        return x+y;
    }

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Beh tu déclares et définis une fonction dans le constructeur d'une class toi ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2006
    Messages : 238
    Points : 103
    Points
    103
    Par défaut
    Voua avez raison j'ai pas fait attention parfois je suis ....

    Merci.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2006
    Messages : 238
    Points : 103
    Points
    103
    Par défaut
    Comment je peux faire appelle à cette DLL pour la tester ?

    Merci

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Tu inclus le .lib et le .h à ton projet puis tu appelles normalement

    N'oublies pas de mettre le .dll dans le rep de l'exe

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2006
    Messages : 238
    Points : 103
    Points
    103
    Par défaut
    sa marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Deleting intermediate files and output files for project 'testdll2 - Win32 Debug'.
    --------------------Configuration: testdll2 - Win32 Debug--------------------
    Compiling...
    StdAfx.cpp
    Compiling...
    testdll2.cpp
    D:\Program Files\Microsoft Visual Studio\MyProjects\testdll2\testdll2.cpp(10) : error C2065: 'somme' : undeclared identifier
    Error executing cl.exe.
     
    testdll2.exe - 1 error(s), 0 warning(s)

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    On peut voir le code qui va avec les erreurs

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2006
    Messages : 238
    Points : 103
    Points
    103
    Par défaut
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "dll2.h"
    #include "stdafx.h"
     
    int main(int argc, char* argv[])
    {
    	printf("Hello World!\n");	
    	printf(somme(1,1));
    	return 0;
    }

  10. #10
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    dans DLL2.H il faut declarer le prototype "somme" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AFX_EXT_API int __stdcall somme(int x,int y);
    et penser a inclure la nouvelle lib (dll2.lib)

    @+

  11. #11
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par Chikh001 Voir le message
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include<iostream>
    using namespace std;
    #include "dll2.h"
    #include "stdafx.h"
     
     
    int main(void)
    {
    	cout << "Hello World!" << endl ;
    	cout << "somme " << somme(1,1) << endl ;
    	return 0;
    }

    N'oublies pas d'inclure le .lib

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2006
    Messages : 238
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par stephdim Voir le message
    dans DLL2.H il faut declarer le prototype "somme" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AFX_EXT_API int __stdcall somme(int x,int y);
    et penser a inclure la nouvelle lib (dll2.lib)

    @+
    il faut que je reviens sur le projet DLL pour ajouter cette declaration ?
    Peut être c'est une question bête mais malheureusement je ne me retrouve pas

    et le fichier .lib est ce lui que je trouve dans le dossier "Debug" du projet ou j'ai créé la DLL ?

Discussions similaires

  1. [VB6]comment créer une dll
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/04/2006, 15h32
  2. Comment (ou peut on) créer une DLL .NET ?
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 02/04/2006, 16h54
  3. Réponses: 3
    Dernier message: 20/02/2006, 19h32
  4. Comment créer une dll Win32 sous Delphi ?
    Par Mickey.jet dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2005, 16h38
  5. [MFC]Créer une DLL BIS
    Par Furtif_00 dans le forum MFC
    Réponses: 5
    Dernier message: 28/06/2004, 15h48

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