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

Soyez le premier à donner votre avis sur cette source.

Vue 10 283 fois - Téléchargée 1 060 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
25 juil. 2006 à 10:59
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
22 juin 2006 à 16:27
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
27 janv. 2005 à 04:58
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
24 mars 2003 à 17:27
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
23 mars 2003 à 12:23
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 -->>
Afficher les 6 commentaires

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.