DLL

cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005 - 16 juin 2005 à 17:52
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005 - 17 juin 2005 à 16:30
Bonjour,
je souhaiterais construire une DLL, pour cela j'ai suivi les consignes d'un tutorial trouvé sur le site internet.
j'ai insérer ce bout de programme:
#include "stdafx.h" // si vous êtes sous VC++


BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
(je ne sais pas à qui cela correspond)
j'ai ensuite mes fonctions définies comme suit:
MU_connect(CString chemin, CString& etat, CString& defaut)
à la compilation je n'ai pas d'erreur par contre qd je construit la DLL, j'ai les erreurs suivantes:
fcs42d.lib(dllmodul.obj) : error LNK2005: [mailto:_DllMain@12 _DllMain@12] already defined in IMU_DLL.obj
Debug/IMU_DLL.dll : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

Qui pourrais m'expliquer l'erreur?

Merci.

9 réponses

ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
16 juin 2005 à 18:37
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
Fais ça :

{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

Je sais pas si ça va marcher ou quoi (juste réflexion comme ça).
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 juin 2005 à 18:46
ncoder> ce n'est un pb de compilation. Apparemment tu as créé
plusieurs DllMain, il faut que tu n'en n'ai qu'un (c'est le point
d'entrée de la DLL, qui peut être appelé pour plusieurs raisons
(attach/detach))
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
16 juin 2005 à 18:50
Et où on trouve ce DLLMain car je ne le vois pas?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 juin 2005 à 18:57
Tu l'a écrit dans ton premier message...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
17 juin 2005 à 09:50
Je suis un peu perdue, je ne comprends pas pourquoi j'aurai 2 DLLMain.

Apres ce bout de prg, j'ai mis:
extern "C" void WINAPI IMU_connect(CString chemin, CString& etat, CString& defaut)
{....}

et apparrement, j'ai vu dans un tutorial qu'il fallait utiliser un .def, mis où il faut écrire:
LIBRARY IMU_DLL
DESCRIPTION 'DLL pour AREA


EXPORTS
IMU_connect @1
IMU_etat @2
IMU_chgt_etat @3
IMU_diffusion @4
IMU_surveillance_tube @5
IMU_surveillance_gtc @6
IMU_param @7
IMU_deconnect @8

mais ca me génére des erreurs, car il ne reconnait pas @

je ne sais plus quoi faire et comment créer la DLL.

j'ai vraiment besoin qu'om me guide.
merci beaucoup de votre aide.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 juin 2005 à 16:06
Le .def n'est pas obligatoire, ca marche très bien sans (euh en fait je
sais pas à quoi il sert). Est-ce que dans ton code tu as 2 DllMain?
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
17 juin 2005 à 16:17
oui, c'est le cas, il me donne une erreur, comme quoi, il y a 2 Dllmain
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 juin 2005 à 16:22
Oui mais dans ce cas il faut en enlever une des 2
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
17 juin 2005 à 16:30
j'ai enfin réussi à créer une dll.
en créant un projet WIN32 Dynamic Link Library, j'ai juste rajouté ceci dans mon code:
//déclaration de la fonction
extern "C"__declspec(dllexport) WINAPI IMU_connect(CString* etat)

sans utiliser le .def et le BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
car ca générit des erreurs. mais est-ce correct?

mais maintenant je souhaiterais la tester en C++, si possible, mais comment faire? la dll doit retourner au pg principal une valeur de type CString.

je te remercie de consacrer un peu de ton temps pour mon problème.
0
Rejoignez-nous