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 :

Création de DLL - Débutant


Sujet :

Visual C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut Création de DLL - Débutant
    Bonjour a tous,

    je dois créer une dll c++ comportant une fonction extremement simple (retourner une chaine de caractere).

    Cette DLL doit être exportable ensuite dans un projet smartDevice C# (pour du Windows CE). Mais lors de l'appel de celle ci, j'ai l'erreur suivante:

    Error
    ExceptionCode: 0xc0000005
    ExceptionAdress: 0x017117dc
    Writing: 0x0000c800
    J'ai donc créé une DLL smartdevice. Les fichiers suivants on été générés:
    dllTest.h - Resource.h - stdafx.h
    dllTest.rc - dllTest.rc2
    dllTest.cpp - dllTest.def - stdafx.cpp

    voici le contenu des divers fichiers:

    dllTest.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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    // dllTest.h*: fichier d'en-tête principal pour la DLL dllTest
    //
     
    #pragma once
     
    #ifndef __AFXWIN_H__
    	#error "incluez 'stdafx.h' avant d'inclure ce fichier pour PCH"
    #endif
     
    #include "resource.h"
    #include <string>
     
    using namespace std;
     
    // CdllTestApp
    // Consultez dllTest.cpp pour l'implémentation de cette classe
    //
     
    class CdllTestApp : public CWinApp
    {
    public:
    	CdllTestApp();
     
    // Substitutions
    public:
    	virtual BOOL InitInstance();
     
    	 string _stdcall getChaine();
     
    	DECLARE_MESSAGE_MAP()
    };

    dllTest.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
    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
    69
    70
    71
    // dllTest.cpp*: définit les fonctions d'initialisation pour la DLL.
    //
     
    #include "stdafx.h"
    #include "dllTest.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
     
    //
    //TODO*: si cette DLL est liée dynamiquement aux DLL MFC,
    //		toute fonction exportée de cette DLL qui appelle
    //		MFC doit avoir la macro AFX_MANAGE_STATE ajoutée au
    //		tout début de la fonction.
    //
    //		Par exemple*:
    //
    //		extern "C" BOOL PASCAL EXPORT ExportedFunction()
    //		{
    //			AFX_MANAGE_STATE(AfxGetStaticModuleState());
    //			// corps de fonction normal ici
    //		}
    //
    //		Il est très important que cette macro se trouve dans chaque
    //		fonction, avant tout appel à MFC. Cela signifie qu'elle
    //		doit être la première instruction dans la 
    //		fonction, avant toute déclaration de variable objet
    //		dans la mesure où leurs constructeurs peuvent générer des appels à la DLL
    //		MFC.
    //
    //		Consultez les notes techniques MFC 33 et 58 pour plus de
    //		détails.
    //
     
     
    // CdllTestApp
     
    BEGIN_MESSAGE_MAP(CdllTestApp, CWinApp)
    END_MESSAGE_MAP()
     
     
    // construction CdllTestApp
     
    CdllTestApp::CdllTestApp()
    {
    	// TODO*: ajoutez ici du code de construction,
    	// Placez toutes les initialisations significatives dans InitInstance
    }
     
     
    // Seul et unique objet CdllTestApp
     
    CdllTestApp theApp;
     
     
    // initialisation de CdllTestApp
     
    BOOL CdllTestApp::InitInstance()
    {
    	CWinApp::InitInstance();
     
    	return TRUE;
    }
     
     
     string _stdcall getChaine()
     {
    	string str= "oki";
    	return str;
     }

    dllTest.def
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ; dllTest.def : déclare les paramètres de module pour la DLL.
     
    LIBRARY      "dllTest"
     
    EXPORTS
    	getChaine
        ; Les exportations explicites peuvent être placées ici

    et enfin, dans le projet en C#, voici comment je l'appelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     [DllImport("dllTest.dll")]
            private static extern string getChaine();
     
            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(getChaine());
            }
    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 245
    Points
    12 245
    Par défaut
    Pour éviter d'aller sur de fausses pistes, il est quasi-impossible d'utiliser une dll MFC (d'extension ou pas) depuis du code managé (C#, VB.NET etc...).

    Donc, si les MFC sont nécessaire, abandonnez le code managé ; si le code managé est nécessaire, abandonnez les MFC.

Discussions similaires

  1. Création de DLL
    Par croc14 dans le forum MFC
    Réponses: 45
    Dernier message: 14/06/2006, 11h57
  2. Fichier XML -> Création de DLL
    Par Nounours666 dans le forum Langage
    Réponses: 11
    Dernier message: 19/11/2005, 18h36
  3. Problème création de DLL avec CString
    Par loupdeau dans le forum MFC
    Réponses: 3
    Dernier message: 21/07/2005, 20h55
  4. Création de DLL
    Par J. dans le forum Windows
    Réponses: 2
    Dernier message: 24/08/2004, 11h59
  5. Problème création de DLL
    Par monsieur.voie.lactee dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/08/2003, 16h56

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