Création et chargement d'une dll graphique (mfc)

Soyez le premier à donner votre avis sur cette source.

Vue 9 828 fois - Téléchargée 943 fois

Description

Je vais ici essayer d'expliquer le chargement et la création d'une DLL graphique...

Source / Exemple :


1/ Code à mettre dans l'exécutable crée pour le chargement de la DLL:

// Déclaration des variables indispensables pour le chargement d?une DLL
HINSTANCE gLibDll;  // ?Handle?
typedef BOOL (*DLLSTART)(); // Définition du type du point d?entrée de la DLL
		           // Ici le point d?entrée ne prend pas de 
		           // paramètres d?entrée et retourne un booléen
DLLSTART dll_Start; // Déclaration d?une variable de type DLLSTART
		
// Code permettant le chargement de la DLL 
          gLibDll = LoadLibrary("DllGraph.dll");
// Récupère l?adresse du point d?entrée de la DLL s?appelant « BOOL Start() » 
// dans la DLL
          dll_Start = (DLLSTART) GetProcAddress(gLibDll, "Start");

// Lancement de la fonction contenant l?adresse du point d?entrée de la DLL
          dll_Start();

// Code permettant la libération de la mémoire allouée pour la DLL
           FreeLibrary(gLibDll);

2/ Code allant dans la DLL

   Il faut créer ici un projet MFC Appwizard(dll) (on prendra comme nom pour l'exemple: DllGraph (VC++ crée donc un DllGraph.cpp et DllGraph.h)
   
Il faut ensuite créer une nouvelle classe de type CDialog
   Pour cela créer en premier une nouvelle resource de type CDialog puis créer une nouvelle classe dérivant de CDialog avec comme ID celui de la resource juste crée. (par ex: CDlgTest est notre classe que l'on vient de créer)
   Maintenant il faut crée un point d'arrêt à notre DLL graphique. Ce point d'entrée doit être insérer dans Test.cpp et sera de ce style:

// Nom de la fonction: Start
// Entrée: aucune
// Sortie: Booléen
extern "C" BOOL __declspec(dllexport) Start()
{
                // Permet d'afficher notre fenetre CDlgTest
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	CDlgTest dlg;
	dlg.DoModal();
	return FALSE;
}

NB :Les paramètres d'un point d'entrée sont obligatoirement en C et non en C++.
NB2: Dans DllGraph.cpp, ne pas oublier d'inclure DlgTest.cpp!!!

Voila le tour est joué, une Dll graphique peut etre charger par un executable.

<<-- H@ldwin -->>

Conclusion :


Il y a un exemple d'utilisation d'une Dll graphik dans le Zip....

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

ThePiepie12
Messages postés
10
Date d'inscription
vendredi 13 décembre 2002
Statut
Membre
Dernière intervention
8 janvier 2007
-
Salut à tous,

Comment on fait si la dll prend des paramètres ?

Merci.
djeb95
Messages postés
1
Date d'inscription
mardi 16 mai 2006
Statut
Membre
Dernière intervention
22 juin 2006
-
Salut,

Je ne sais pas quel type d'application MFC il faut ici pour tester ton source ?(SDI, MDI, Dialog based...)

J'espere que tu va pouvoir me renseigner

Merci
jeanlouisd
Messages postés
1
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
27 janvier 2005
-
Merci beaucoup pour cet exemple. En partant de la doc Microsoft et en utilisant l'atelier Visual C++, je n'étais par parvenu à faire apparaître mon graphisme, et à partir de l'analyse de ton code j'ai ajouté l'instruction non documentée mais nécessaire, AFX_MANAGE_STATE(AfxGetStaticModuleState()); !!!
Merci encore
cs_nikko
Messages postés
62
Date d'inscription
jeudi 18 avril 2002
Statut
Membre
Dernière intervention
29 septembre 2004
-
Faut noter qu'il y a deux façons de charger une DLL: la façon manuelle (la tienne) et la façon automatique (plus simple). Mais je dis ça de mémoire et je ne paux montrer d'exemple de suite.
Faudra insister... ;-)
Haldwin
Messages postés
77
Date d'inscription
lundi 15 avril 2002
Statut
Membre
Dernière intervention
16 juin 2004
-
Voila je te rajoute une source... avec l'executable et la Dll associée!!!
Lorsque tu veux debugger ta Dll, VC++ te demande le chemin de l'executable: tu mets donc le chemin de ton exec...
Bon dev et n'hesitez pas à me demander d'autres infos si je me suis mal expliqué,
<<-- H@ldwin -->>

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.