en fait ça fonctionne bien de cette façon mais comme c'est moi qui l'ai fait ça ne me semble pas très orthodoxe surtout le void __stdcall CALLBACK M2(char *s) {}. Ya t'il une autre voie pour faire de D1(&M2); quelque chose qui ressemblerait à ceci : D1(void __stdcall CALLBACK M2(char *s) {}); ?
Deuxième question : savez-vous à quoi correspond le @4 dans D1 = (lp3) GetProcAddress((HINSTANCE)hD1, "_DLL@4"); ? Je sais que _DLL appelle la fonction dans la dll mais je ne sais pas à quoi sert ce @4...
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 14 août 2007 à 14:57
Déjà, CALLBACK est un __stdcall. Inutile d'ajouter un __stdcall avant.
Ensuite void __stdcall M2(char *s) {} C'est sensé être quoi ? Pour l'instant, ça a l'aire d'une fonction qui ne faire rien.
Pour ta deuxième question, le 4 correspond au poids en bit des arguments de la fonction.
Alors si je retire soit CALLBACK soit __stdcall, le résultat de l'opération est "l'instruction à 0x00000000...l'adresse ne peut pas être read" lorsque je lance le prog. Comme il n'y a pas d'erreur à la compil peut-être est-ce parce que je déclare mal la fonction d'appel dans la dll...à vrai dire j'en sais rien
Tiens voilà sur quoi je m'entraine si ça peut t'aiguiller :
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 14 août 2007 à 16:04
On dirait que c'est bon là. Cependant, je ne vois pas à quoi sert LP1 et pourquoi dans le code appelant, tu passent en param une fonction quand tu demande un DWORD.
"correspond au poids en bit des arguments"
Houla la fatigue. En effet, ces le poids en octet en non en bit.
Oui, il s'agit du DWORD qui fais 4 octets.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 14 août 2007 à 16:08
En passent, ta DLL n'a pas une .lib généré avec ? Elle devrait être présente. Si c'est le cas, copie la dans le rep de ton projet, ajoute la au linker et déclare les prototypes de ta fonction dans ton .c (si tu n'a pas fais de .h). Ça devrait donner quelque chose comme ça:
__declspec(dllimport) int __stdcall DLL(DWORD lpt1);
Tu devrais pouvoir l'appeler simplement avec son nom plutôt que d'utiliser LoadLibrary et GetProcAddress
Merci SAKingdom, j'ai réussi à faire ce que je voulais CAD : DLL_API int __stdcall DLL() et lancer la dll avec _DLL@0 (moi-auusi je ne voyais pas à quoi pouvait servir ce DWORD lpt1) là c'est plus propre à mon goût ;) avec la lib d'ajouté.