Dialog dans DLL ? [Résolu]

Signaler
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
-
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
-
Hello all



J'esseye d'utiliser dans mon programme une fenêtre dialog qui se trouve
dans une dll, mais la fonction qui traite les message de la fenêtre
doit être dans la dll et non dans l'exe, est-ce possible ? si oui
comment ? merci

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Dans ton DllMain enregistre le 1er param (hdll) dans une variable quand reason vaut DLL_PROCESS_ATTACH.
Exporte par ta dll une func GetHinstDll() par exemple. Ensuite tout le code pourra aller dans l'exe.
DialogBoxParam(GetHinstDll(), (LPCTSTR)IDD_APP, NULL, AppDlgProc, 0);

ciao...
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
DialogBoxParam(hDllIci, (LPCTSTR)IDD_APP, 0, AppDlgProc, 0);

ciao...
BruNews, MVP VC++
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
1
Merci, j'ai donc testé ceci :



Code de la Dll :




#include <windows.h>

#include "resource.h"



LRESULT CALLBACK AppDlgProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);



HINSTANCE hDll;



int __stdcall Dialog()

{

   DialogBoxParam(hDll, (LPCTSTR)IDD_APP, NULL, &amp;AppDlgProc), 0);

   return 0;

}



LRESULT CALLBACK AppDlgProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)

{

    int Select;

    switch(message)

    {

    case WM_COMMAND:

        Select=LOWORD(wParam);

        switch(Select)

        {

        case IDOK:

            MessageBox(0, "ok", "Test", 0);

            return TRUE;

        case IDCANCEL:

            EndDialog(Dlg,Select);

            PostQuitMessage(0);

            return TRUE;

        }

    default:

        return FALSE;

    }

}





Code de l'exe:




#include <windows.h>



typedef BOOL (*FONCTION) (void);



int APIENTRY WinMain(HINSTANCE hInstance,

                    
HINSTANCE hPrevInstance,

                    
LPSTR     lpCmdLine,

                    
int       nCmdShow)

{



    HINSTANCE hDll = LoadLibrary("Dll.dll");

    FONCTION fDialog = (FONCTION)GetProcAddress(hDll, (LPCSTR)"Dialog");



    fDialog();



    return 0;

}





Mais la fenêtre n'apparait pas une fois le programme éxecuté.

Aussi j'ai dû changer la ligne :



DialogBoxParam(hDll, (LPCTSTR)IDD_APP, NULL, &AppDlgProc), 0);



par :



DialogBoxParam(hDll, (LPCTSTR)IDD_APP, NULL, reinterpret_cast<DLGPROC>(&AppDlgProc), 0);



Sinon il ne compilait pas, pourquoi ?



Voilà
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
1
Merci !