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 :

creation d'une DLL


Sujet :

MFC

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 6
    Par défaut creation d'une DLL
    Bonjour,

    j'ai une dialogue qui gére l'affichage de caratère unicode que je souhaite compiler avec les option unicode.

    Mon projet principale ne gere pas le mode unicode. ( car non compiler avec l'option)
    J'ai réaliser une fonction d'initialisation à ma dialogue qui passe a celle ci des WCHAR.

    Donc j'aimerais que ma dialogue se charge d'affecter les WCHAR au CString compilé en unicode.

    Pour ce faire j'ai choisie d'isoler toute la dialogue qui affiche les caratères unicode dans un projet DLL que je compile avec l'option unicode.

    Mes questions sont :
    * de savoir si je peux mettre des ressources dans une DLL ?
    * Qu'elle type de DLL dois je créer ? (extension, regulière )

    Mon résultat doit juste me permettre d'appeller ces methodes pour afficher la dialogue

    ma DLL doit exporter la classe "CTableCaracteresDlg"
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    /* .h de la classe
     
    #pragma once
     
    #include "grid\gridctrl.h"
    #include "afxwin.h"
     
    #define DLLEXPORT _declspec(dllexport)
     
    typedef struct structCaractereClavier{
    public :
             int iNumLigne;
             int iNumColonne;
            CString strSequenceCaracteres;
            CString strCommentaire;
    } structCaractereClavier;
     
     
     
    typedef CList<structCaractereClavier *, structCaractereClavier *> lstPPCaracteresClavier;
     
     
    // Boîte de dialogue CTableCaracteresDlg
     
    class CTableCaracteresDlg : public CDialog
    {
    	DECLARE_DYNAMIC(CTableCaracteresDlg)
     
    private:
     
    	CFrameWnd * m_pMainFrame;
     
    	CString	m_strCaractereChoisi;
    	CString m_strTableCourante;
    	CSize m_OldSize;
    	CString m_strCommentaire;
    //	CString m_strCode;
    	lstPPCaracteresClavier * m_plstCaracteres;
    	CComboBox m_comboChoixTable;
     
    	void ClearTable();
    	void RedimensionnerFenetre();
    	void InitialiserListeNomsDeTables();
     
    protected:
    	DLLEXPORT virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge DDX/DDV
    	DLLEXPORT virtual BOOL OnInitDialog();
    	DLLEXPORT BOOL PreTranslateMessage(MSG* pMsg);
    /*	afx_msg void OnSysKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags);
    	afx_msg void OnSysKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags);
    	afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
    */
    	DECLARE_MESSAGE_MAP()
     
    public:
     
     
     
    	CGridCtrl m_grdTableCaracteres;
     
    	CMapStringToPtr m_lstTablesCaracteres;
     
    	DLLEXPORT CTableCaracteresDlg(CWnd* pParent = NULL);   // constructeur standard
    	DLLEXPORT virtual ~CTableCaracteresDlg();
    	DLLEXPORT  void createDLG() ;
     
    	//DLLEXPORT void SetPMainFrame(CFrameWnd * pMainFrame);
    	void Initialiser();
    	DLLEXPORT CString GetCaractereChoisi();
    	DLLEXPORT CString GetTableCourante();
     
    	void ChargerTableComplete(void);
    	DLLEXPORT void ChargerTable(CString strNomTable);
     
    	void GetListeNomsClaviers(CList<CString, CString&>& lstNomsClaviers) ;
    	lstPPCaracteresClavier * GetListeCaracteres(CString strNomClavier) ;
     
    	DLLEXPORT void AjouterRangeCaracteresDansTable(CString strNomClavier, int iNumLigne, int iNumColonne, CStringArray  *tabCaracteresUnicodes, CString  strCommentaire) ;
    	DLLEXPORT void AjouterSequenceCaracteresDansTable(CString strNomClavier, int iNumLigne, int iNumColonne, CStringArray  *tabCaracteresUnicodes, CString  strCommentaire) ;
    	DLLEXPORT void AjouterCaractereDansTable(CString strNomClavier, int iNumLigne, int iNumColonne, WCHAR *  strCaracteres, CString  strCommentaire) ;
    	//void ViderTablesCaracteres() ;
     
    // Données de boîte de dialogue
    	enum { IDD = IDD_DLG_TABLECARACTERES };
     
    	afx_msg void OnSize(UINT nType, int cx, int cy);
    	afx_msg void OnBnClickedValider();
        afx_msg void OnGridDblClick(NMHDR *pNotifyStruct, LRESULT* pResult);
        afx_msg void OnGridToolTipsCreated(NMHDR *pNotifyStruct, LRESULT* pResult);
    /*	afx_msg void OnAffichageTableCaracteres();
    	afx_msg void OnAffichageTableCaracteres01();
    	afx_msg void OnAffichageTableCaracteres02();
    	afx_msg void OnAffichageTableCaracteres03();
    	afx_msg void OnAffichageTableCaracteres04();
    	afx_msg void OnAffichageTableCaracteres05();
    	afx_msg void OnAffichageTableCaracteres06();
    	afx_msg void OnAffichageTableCaracteres07();
    	afx_msg void OnAffichageTableCaracteres08();
    	*/
    	afx_msg void OnCbnDropdownCombochoixtable();
    	afx_msg void OnCbnKillfocusCombochoixtable();
    	afx_msg void OnCbnCloseupCombochoixtable();
    	afx_msg void OnCbnSelchangeCombochoixtable();
    };
     
    */
    Code qui doit se trouver dans l'appli qui utilise ma dll :

    les ligne de code qui suive se trouve à la fin de ma fonction InitInstance de ma classe APP
    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
     
    // instancie mon objet
    theApp.m_MainFrame->m_dlgTableCaracteres=new CTableCaracteresDlg(theApp.m_MainFrame) ;
     
     
    theApp.m_MainFrame->m_dlgTableCaracteres->createDLG() ;
     /*   code inclu dans la dll
      void CTableCaracteresDlg::createDLG()
     {
                    // m_pMainFrame est initialisé dans le constructeur avec la classe MAinFram de l'application parent
    	// creation de la table des caractères
    	int ret=this->Create(IDD_DLG_TABLECARACTERES,m_pMainFrame) ;
    	if (!ret)
    	{
    		AfxMessageBox("Impossible de créer la fenêtre table de caracteres\n");
    		return ;      // échec de la création
    	}
    	//m_dlgTableCaracteres->SetPMainFrame(this);
    	this->MoveWindow(100, 100, 600, 600, false);
    	this->Initialiser();
     
     
       }
    */
    apparamant la fonction create se termine avec 0, la dilaogue n'a pas pu etre créé


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	theApp.m_MainFrame->m_dlgTableCaracteres->ChargerTable("CLAVIER_MATH1");
    	theApp.m_MainFrame->m_dlgTableCaracteres->ShowWindow(SW_SHOW);
    la fin de la focntion initInstance se termine avec une erreur dans la fonction
    AfxCallWndProc.

    C'est surement parque la dialogue n'est pas créé.

    Auriez vous des conseils pour m'aider à créer et à insérer ma classe

    cordialement

    olivier
    [a l'avenir pense à mettre la balise code ,Merci Farscape]

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Eh bien d'une part, oui tu peux mettre des ressources dans une DLL.
    d'autre part, visiblement, tu dois créer une DLL MFC. (pas ATL, apparemment)
    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.

  3. #3
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Pour être plus précis tu dois créer une DLL d'extension pour pouvoir exporter des classes entières. Mais les DLL d'extension ne sont valables que pour des exe MFC. En revanche tu peut exporter uniquement des fonctions et des variables en crééant une DLL MFC régulière statique ou dynamique dont tu peut importer ses éléments dans des exe MFC ou non MFC.

    Et donc ça te fait trois types de DLL avec les MFC:

    1. Une DLL d'extension : pour exporter aussi biens des fonctions mais aussi des classes MFC.
    2. Une DLL régulière liée de manière dynamique au DLLs MFC : pour exporter uniquement des fonctions et variables
    3. Une DLL régulière liée de manière statique au DLLs MFC: pour exporter uniquement des fonctions et variables

    Il y a des DLLs Win 32 pour exporter que des fonctions.

    Voilà
    Gabrielly

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Euh.. QU'est-ce que vous appelez exactement DLL d'extension?

    Visual C++ 6 ne semble pas faire la distinction, bien que je me doute que pour utiliser une DLL exportant une classe, on soit obligé de la charger de façon implicite avec la lib statique d'importation, LoadLibrary() et GetProcAddress() étant plutôt difficiles à associer avec des classes...
    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 émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Une DLL d'extension est celle qui te permet d'utiliser des objets MFC, de créer des classes qui dérivent de celles des MFC par héritage et de les exporter vers ton programme.

    Elle est une extension parce que étant une DLL elle étend les DLLs standard des MFC, en usant de l'héritage de tes classes vers les classes MFC.

    Au fait ta DLL d'extension est une sorte de spécialisation des DLLs standards (plus générales) auxquelles tu te lies essentiellement dynamiquement.

Discussions similaires

  1. creation d'une dll appelant une autre librairie
    Par nezdeboeuf62 dans le forum Windows
    Réponses: 5
    Dernier message: 23/03/2007, 10h22
  2. Creation d'une dll
    Par laetous dans le forum C++
    Réponses: 6
    Dernier message: 18/09/2006, 14h16
  3. Erreur de link a la creation d'une dll
    Par drcd dans le forum MFC
    Réponses: 12
    Dernier message: 29/05/2006, 15h13
  4. creation d'une dll ?
    Par alienz13 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 09/05/2006, 13h31
  5. probleme a la creation d'une dll
    Par anthonycosson dans le forum C++
    Réponses: 1
    Dernier message: 14/03/2006, 13h35

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