Probleme import dll

Messages postés
45
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
1 janvier 2008
- - Dernière réponse : yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
- 10 déc. 2006 à 17:41
Bonjour a tous

voila mon probleme j'ai fait une dll en non mfc je la compile tout se passe bien nickel et je veux la load dans appartire de mon application MFC mes la probleme il ne me trouve pas la function dans la dll voila ma procedure de import de dll

HINSTANCE gLibDll;
typedef int (*DLL_TEST)();
DLL_TEST test;
gLibDll =  LoadLibraryA("MS_Stock_lib.dll");
test = (DLL_TEST) GetProcAddress(gLibDll, "test");
test();

et voila ma function dans la dll

__declspec(dllexport) int test()
{
    MessageBox(NULL,"coucou2",MB_OK,0);
    return 0;
}

--==Papi Psycho==--
Afficher la suite 

6 réponses

Messages postés
59
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
4 avril 2007
0
Merci
Essaye
extern"C" __declspec(dllexport) int test()
{
    MessageBox(NULL,"coucou2",MB_OK,0);
    return 0;
}
pour l'export de la fonction
Commenter la réponse de clempar55
Messages postés
45
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
1 janvier 2008
0
Merci
si je mes externe "c" sela me fait une erreur et puis externe serre pour le c++ ma dll est en c

--==Papi Psycho==--
Commenter la réponse de papipsycho
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
32
0
Merci
Salut:

Ajoutes des testes pour savoir où se lacalise l'erreur :
- Au moment du chargement de la DLL (Fais attention à son emplacement)
- Au moment du chargement de la fonction
Commenter la réponse de Ombitious_Developper
Messages postés
45
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
1 janvier 2008
0
Merci
voila ma function il s'arrete a 6

BOOL CMD_StockView::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class

    CString strMsg;
   
    if (pMsg->hwnd == ::GetDlgItem(this->m_hWnd,IDC_EDIT1)) {
        if (pMsg->message == WM_KEYDOWN) {
            if(pMsg->wParam == 13)
            {
                MessageBoxA(NULL,"1",MB_OK,0);
                HINSTANCE gLibDll;
                MessageBoxA(NULL,"2",MB_OK,0);
                typedef int (*DLL_TEST)();
                MessageBoxA(NULL,"3",MB_OK,0);
                DLL_TEST test;
                MessageBoxA(NULL,"4",MB_OK,0);
                gLibDll =  LoadLibraryA("MS_Stock_lib.dll");
                MessageBoxA(NULL,"5",MB_OK,0);
                test = (DLL_TEST) GetProcAddress(gLibDll, "test");;
                MessageBoxA(NULL,"6",MB_OK,0);
                test();
                MessageBoxA(NULL,"7",MB_OK,0);
            }
        }
    }
   
    return CFormView::PreTranslateMessage(pMsg);
}

--==Papi Psycho==--
Commenter la réponse de papipsycho
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
32
0
Merci
Salut:

Ce que je veux te dire c'est d'examiner les valeurs de retour de LoadLibrary et GetProcAddress

typedef int (*DLL_TEST)();

HANDLE    gLibDll;
DLL_TEST test;

if (!(gLibDll =  LoadLibraryA("MS_Stock_lib.dll")))
    MessageBox (NULL, "Erreur de chargement de DLL", "Erreur", MB_OK);
else {
    if (!(test = (DLL_TEST) GetProcAddress(gLibDll, "test")))
       MessageBox (NULL, "Erreur de chargement de la fonction à partir du DLL", "Erreur", MB_OK);
    else
        test();    
}
Commenter la réponse de Ombitious_Developper
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17
0
Merci
Tu ne devrais pas avoir d'erreur sur extern "C", cela sert à importer la fonction C sans décoration de nom :
Dans ton EXE MFC fais un prototype :
extern "C" __declspec(dllimport) int test();

// même si dllimport est facultatif.
Commenter la réponse de yann_lo_san