Chargement dynamique d'une dll

Soyez le premier à donner votre avis sur cette source.

Snippet vu 27 088 fois - Téléchargée 32 fois

Contenu du snippet

Se trouve aussi ici: http://www.dev.winsysdev.com/

Voici un exemple de code en C vous permettant de charger dynamiquement une DLL dans votre programme (si par exemple vous n'avez pas le .lib de la DLL).

Dans l'exemple j'ai pris le cas d'une DLL __sdtcall mais vous pouvez bien sur utiliser __cdecl.

Source / Exemple :


// Chargement dynamique d'une DLL
int hModDll;
hModDll = (int)LoadLibrary("madll.dll");
if ((int)hModDll < 32) MessageBox(GetActiveWindow(),"Erreur lors du chargement de la DLL.","Erreur",0);

typedef int (__stdcall* lpFunc1) (protype de la fonction);
lpFunc1 Func1;

Func1 = (lpFunc1) GetProcAddress((HINSTANCE)hModDll, "NomDeLaFonctionDansLaDLL");

int retour;

retour = ((Func1)(mes arguments));

// On décharge la DLL de la mémoire.
FreeLibrary(hModDll );

Conclusion :


Enjoy !

A voir également

Ajouter un commentaire Commentaires
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
Bon, j'ai tout mis en __cdecl et ca fonctionne... Mais je ne comprends toujours pas ce qui avait pu se passer...

Le prototype de ma fonction était :
extern "C" __declspec(dllexport) int DllFunctionList(char***& list)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Si Func1 == NULL c'est que ce point d'entree n'a pas ete trouve.
C'est une question de decoration des noms produit par les compilos C++. Il faut toujours forcer leur NON decoration par un:
extern "C" devant l'implem de la fonction dans le code de la dll.
Idem dans le h si on s'en sert pour un linkage statique.
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
euh j'ai juste un problème : je met une dll __cdecl avec le même script que là haut, ca fait une erreur mais si on fait ignorer ca marche... je fais la même chose avec une dll __stdcall ca ne fait plus d'erreur mais après l'instruction

Func1 = (lpFunc1) GetProcAddress((HINSTANCE)hModDll, "NomDeLaFonctionDansLaDLL");

Func1 est égal à NULL... Pourquoi ? (note : j'ai posé une question sur le forum on m'a pas répondu correctement donc je demande ici)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
__sdtcall, __cdecl, __fastcall sont les conventions d'appel qui determinent comment sont passes les parametres des fonctions. Ceci n'est pas specifique aux DLLs.
Regarde MSDN sur le sujet.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
Bonjour, je viens de tomber sur cette source car je cherche le moyen de charger une dll de facon dynamique... Mais pourriez-vous m'expliqué ce qu'est une DLL __sdtcall et une DLL __cdecl?
Afficher les 10 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.