cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 2006
-
9 mars 2003 à 19:13
CyberP
Messages postés283Date d'inscriptionmercredi 8 janvier 2003StatutMembreDerniè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.
CyberP
Messages postés283Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention 4 juillet 20072 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és283Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention 4 juillet 20072 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 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 15 mars 2003 à 14:45
#include <windows.h> // TOUJOURS
Viper31
Messages postés96Date d'inscriptionmardi 2 avril 2002StatutMembreDerniè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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és77Date d'inscriptionlundi 15 avril 2002StatutMembreDernière intervention16 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és949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 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() ?
30 janv. 2004 à 17:38
Le prototype de ma fonction était :
extern "C" __declspec(dllexport) int DllFunctionList(char***& list)
29 janv. 2004 à 19:20
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.
29 janv. 2004 à 18:42
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)
23 déc. 2003 à 19:35
Regarde MSDN sur le sujet.
23 déc. 2003 à 19:30
15 mars 2003 à 14:45
15 mars 2003 à 14:38
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ô
10 mars 2003 à 00:45
c'est un bon depart.
Vire le 32, c'est pour test de ShellExecute().
Simplrement:
if((hModDll LoadLibrary("madll.dll")) NULL) ERRATO;
ciao...
9 mars 2003 à 21:20
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 -->>
9 mars 2003 à 19:13
- A quoi correspond le '32' dans ton test avec LoadLibrary() ?