CHARGEMENT DYNAMIQUE D'UNE DLL

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 9 mars 2003 à 19:13
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 30 janv. 2004 à 17:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10539-chargement-dynamique-d-une-dll

CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
30 janv. 2004 à 17:38
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)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 janv. 2004 à 19:20
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.
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
29 janv. 2004 à 18:42
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)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 déc. 2003 à 19:35
__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.
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
23 déc. 2003 à 19:30
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?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mars 2003 à 14:45
#include <windows.h> // TOUJOURS
Viper31 Messages postés 96 Date d'inscription mardi 2 avril 2002 Statut Membre Dernière intervention 7 août 2005
15 mars 2003 à 14:38
question de curiosité , quel bibliotheque a inclure ? windows.h ?
c'est juste parce que j'en sais rien et que ce bout de code pourrait me servir plus tard , quand j aurai compris le fonctionnement des DLL ;) !!

Tchô
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 mars 2003 à 00:45
Salut,
c'est un bon depart.
Vire le 32, c'est pour test de ShellExecute().
Simplrement:
if((hModDll LoadLibrary("madll.dll")) NULL) ERRATO;
ciao...
Haldwin Messages postés 77 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 16 juin 2004
9 mars 2003 à 21:20
Salut,

Je voulais aussi savoir pourquoi tu as casté le Handle en int?

Et puis juste une petite rectification lorsque tu dis dans l'entête: "chargement dynamique d'une Dll" il vaut mieux dire simplement "chargement d'une Dll" car Dll veut dire "dynamic link library".
Mis à part ça, c'est une source utile pour ceux qui ne connaissent pas l'utilisation d'une Dll...
Bon dev,
<<-- H@ldwin -->>
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
9 mars 2003 à 19:13
- Pourquoi tu castes le handle retourné par LoadLibrary() en int ?

- A quoi correspond le '32' dans ton test avec LoadLibrary() ?
Rejoignez-nous