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 :

Initialisation d'une DLL non mfc


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par d�faut Initialisation d'une DLL non mfc
    Bonjour, j'essaie de charger une librairie non mfc dans un projet.
    J'ai pu trouver cet exemple de code sur la msdn mais je ne comprends pas les param�tres utilis�s dans la fonction DllMain.

    Quelqu'un pourrait me dire qu'est-ce que c'est et � quoi ils servent s'il vous plait?

    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
    14
    15
    16
    BOOL APIENTRY DllMain(HANDLE hModule, 
                          DWORD  ul_reason_for_call, 
                          LPVOID lpReserved)
    {
        switch( ul_reason_for_call ) {
        case DLL_PROCESS_ATTACH:
        ...
        case DLL_THREAD_ATTACH:
        ...
        case DLL_THREAD_DETACH:
        ...
        case DLL_PROCESS_DETACH:
        ...
        }
        return TRUE;
    }
    Je vous remercie.

  2. #2
    Expert confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par d�faut
    1-il faut trouver un bon tuto sur la programmation win32
    2-MFC masque tout cela; dans une dll MFC tu as le m�me code mais il est masqu� en quelque sorte.
    DllMain c'est le point d'entr�e de la dll de mani�re similaire � int main() pour un programme en ligne de console C.
    Pour un exe win32 c'est WinMain().
    Je suis sur qu'il ya un tuto sur les dll

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par d�faut
    Voil�, apr�s avoir visit� les forums sur le chargement de librairie non mfc voil� ce que j'ai fais pour charger ma librairie:

    Je suis ici dans le dllmain.cpp

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BOOL Dllmain::InitInstance()
    {
    	// TODO:  perform and per-thread initialization here
     
       typedef int(*Type_Pointeur_De_Fonction)(const int, char*const,double*);
       Type_Pointeur_De_Fonction Pointeur_Fonction;
       DLLHandle = LoadLibrary("C:\\Barthe\\test_MFC_bis\\C843_GCS_DLL.dll");
       Pointeur_Fonction = (Type_Pointeur_De_Fonction)GetProcAddress(DLLHandle,"C843_qPOS");
       return 0;
    }
    Et ce que j'ai fais pour la lib�rer:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    int Dllmain::ExitInstance()
    {
    FreeLibrary(DLLHandle);
    }
    Donc ici, pas d'erreur lors de la compilation, ce qui signifie donc que ma dll a bien �t� charg�e (enfin je crois...)

    Par contre dans un autre fichier .cpp, je rajoute le .h du code ci-dessus et j'essaie d'utiliser la fonction que j'ai d�clar� plus t�t:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "dllmain.h"
     
    void CTest_MFCView::OnUpz() 
    {
    	UpdateData(TRUE);
            C843_qPOS(ID,"3",&Pos_az);	
     
     
    }
    mais j'ai une erreur du type:
    test_MFCView.obj : error LNK2001: unresolved external symbol __imp__C843_qPOS@12
    Debug/test_MFC.exe : fatal error LNK1120: 1 unresolved externals

    Avez-vous une id�e s'il vous plait?

  4. #4
    Expert confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par d�faut
    Citation Envoy� par miwarrior Voir le message
    Donc ici, pas d'erreur lors de la compilation, ce qui signifie donc que ma dll a bien �t� charg�e (enfin je crois...)
    1-re : apprendre � d�boguer et utiliser des breakpoints
    2-euh j'arrive pas � comprendre: tu veux charger une dll au sein d'une dll ?

  5. #5
    Membre chevronn� 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
    Par d�faut
    test_MFCView.obj : error LNK2001: unresolved external symbol __imp__C843_qPOS@12
    Debug/test_MFC.exe : fatal error LNK1120: 1 unresolved externals
    normal que le linker ne trouve pas la fonction puisque tu charges la dll au moment de l'ex�cution et non de la compilation.

    deux solutions pour se lier � une DLL:

    * soit � la compilation : il faut alors indiquer au LINKER un fichier .LIB qui d�crit le contenu de la DLL. Ce fichier .LIB est g�n�r� lorsque tu compiles la DLL. Si c'est pas toi qui a cr�� la DLL, tu dois r�cup�rer le fichier .LIB aupr�s de la personne qui l'a compil�e. Pour d�clarer au LINKER ce fichier .LIB, �a se passe dans les Propri�t�s du projet, rubrique Linker / Input

    tu dois aussi avoir un fichier header .h qui d�clare tout les prototypes de fonctions avec _declspec(dllimport) pour que �a marche


    * soit � l'ex�cution : dans ce cas tu utilises LoadLibrary / FreeLibrary
    Le LINKER lui ne sait pas quoi faire avec ta fonction C843_qPOS qu'il ne connait pas ...

    par contre, ton appel � ta fonction, tu peux le faire comme �a:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    Pointeur_Fonction = (Type_Pointeur_De_Fonction)GetProcAddress(DLLHandle,"C843_qPOS");
     
    ...
     
    Pointeur_Fonction(ID,"3",&Pos_az)
    @+

Discussions similaires

  1. R�ponses: 12
    Dernier message: 23/05/2007, 21h40
  2. R�ponses: 3
    Dernier message: 19/02/2007, 15h07
  3. Dll manag� utilise une dll non manag�
    Par DAMVAL dans le forum C++/CLI
    R�ponses: 3
    Dernier message: 28/11/2006, 10h36
  4. R�ponses: 12
    Dernier message: 30/01/2006, 21h13
  5. Creation d'un message dans une dll non MFC
    Par dug dans le forum Windows
    R�ponses: 1
    Dernier message: 29/11/2005, 12h50

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