Probleme import dll

Signaler
Messages postés
45
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
1 janvier 2008
-
yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
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==--

6 réponses

Messages postés
59
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
4 avril 2007

Essaye
extern"C" __declspec(dllexport) int test()
{
    MessageBox(NULL,"coucou2",MB_OK,0);
    return 0;
}
pour l'export de la fonction
Messages postés
45
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
1 janvier 2008

si je mes externe "c" sela me fait une erreur et puis externe serre pour le c++ ma dll est en c

--==Papi Psycho==--
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
34
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
Messages postés
45
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
1 janvier 2008

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==--
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
34
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();    
}
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
18
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.