begin process at 2012 05 30 10:42:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Périphériques

 > 

utiliser les fonctions d'une DLL


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

utiliser les fonctions d'une DLL

vendredi 9 mai 2003 à 12:29:28 | utiliser les fonctions d'une DLL

andrealphus

4ndr&@lphu$

1)
en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
Mais ca je l'ai normalement résolu en remplaçant:

//prototype d'une des fonctions
int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);

par

__declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);

2)
j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :

pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:

__declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);

...et lorsque je copile tout ca,

j'obtient l'erreur suivante:
"error C2106: '=' : left operand must be l-value"
à la ligne:
(FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);

SVP AIdez moi je vais craquer...merci d'avence !
vendredi 9 mai 2003 à 12:43:14 | Re : utiliser les fonctions d'une DLL

BruNews

Administrateur CodeS-SourceS
Je te mets un exemple, un de mes anciens progs.
Dans la dll:
BOOL IsFreeScrab(const char* pszPath);
exporte grace a fichier def, que je prefere.
Dans prog appelant:
typedef BOOL (*ISFREESCRAB) (const char* pszPath);
ISFREESCRAB IsFreeScrab;
IsFreeScrab = (ISFREESCRAB)GetProcAddress(hDll, (LPCSTR)10);
BOOL bOK = IsFreeScrab(szfile); // licence valide ?
etc...
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> 4ndr&@lphu$
>
> 1)
> en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
> Mais ca je l'ai normalement résolu en remplaçant:
>
> //prototype d'une des fonctions
> int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
>
> par
>
> __declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
>
> 2)
> j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :
>
> pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:
>
> __declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);
>
> ...et lorsque je copile tout ca,
>
> j'obtient l'erreur suivante:
> "error C2106: '=' : left operand must be l-value"
> à la ligne:
> (FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);
>
> SVP AIdez moi je vais craquer...merci d'avence !
vendredi 9 mai 2003 à 16:06:14 | Re : utiliser les fonctions d'une DLL

andrealphus


4ndr&@lphu$

j'ai un peu de mal à suivre ta démarche, et c'est koi un fichier def ?? (en msft visual c++ ?)

-------------------------------
Réponse au message :
-------------------------------

> Je te mets un exemple, un de mes anciens progs.
> Dans la dll:
> BOOL IsFreeScrab(const char* pszPath);
> exporte grace a fichier def, que je prefere.
> Dans prog appelant:
> typedef BOOL (*ISFREESCRAB) (const char* pszPath);
> ISFREESCRAB IsFreeScrab;
> IsFreeScrab = (ISFREESCRAB)GetProcAddress(hDll, (LPCSTR)10);
> BOOL bOK = IsFreeScrab(szfile); // licence valide ?
> etc...
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > 4ndr&@lphu$
> >
> > 1)
> > en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
> > Mais ca je l'ai normalement résolu en remplaçant:
> >
> > //prototype d'une des fonctions
> > int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> >
> > par
> >
> > __declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> >
> > 2)
> > j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :
> >
> > pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:
> >
> > __declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);
> >
> > ...et lorsque je copile tout ca,
> >
> > j'obtient l'erreur suivante:
> > "error C2106: '=' : left operand must be l-value"
> > à la ligne:
> > (FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);
> >
> > SVP AIdez moi je vais craquer...merci d'avence !
>
vendredi 9 mai 2003 à 16:26:38 | Re : utiliser les fonctions d'une DLL

BruNews

Administrateur CodeS-SourceS
Quand tu fais une dll tu as d'autre moyen d'exporter des fonctions. Entre autre en faisant un fichier nomdll.def a incorporer dans le projet. Il permet d'exporter tes fonctions au format C standard sans decoration des noms.
Voila interieur:
LIBRARY "ServScra"
DESCRIPTION 'ServScra Windows Dynamic Link Library'

EXPORTS
IsFreeScrab @10 NONAME
About @11 NONAME
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

>
> 4ndr&@lphu$
>
> j'ai un peu de mal à suivre ta démarche, et c'est koi un fichier def ?? (en msft visual c++ ?)
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Je te mets un exemple, un de mes anciens progs.
> > Dans la dll:
> > BOOL IsFreeScrab(const char* pszPath);
> > exporte grace a fichier def, que je prefere.
> > Dans prog appelant:
> > typedef BOOL (*ISFREESCRAB) (const char* pszPath);
> > ISFREESCRAB IsFreeScrab;
> > IsFreeScrab = (ISFREESCRAB)GetProcAddress(hDll, (LPCSTR)10);
> > BOOL bOK = IsFreeScrab(szfile); // licence valide ?
> > etc...
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > 4ndr&@lphu$
> > >
> > > 1)
> > > en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
> > > Mais ca je l'ai normalement résolu en remplaçant:
> > >
> > > //prototype d'une des fonctions
> > > int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > >
> > > par
> > >
> > > __declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > >
> > > 2)
> > > j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :
> > >
> > > pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:
> > >
> > > __declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);
> > >
> > > ...et lorsque je copile tout ca,
> > >
> > > j'obtient l'erreur suivante:
> > > "error C2106: '=' : left operand must be l-value"
> > > à la ligne:
> > > (FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);
> > >
> > > SVP AIdez moi je vais craquer...merci d'avence !
> >
>
lundi 12 mai 2003 à 08:55:03 | Re : utiliser les fonctions d'une DLL

andrealphus


4ndr&@lphu$

c'est ok pour le fichier def mais maintenant on retombe qd meme sur mon premier probleme:
à la ligne mon_pointeur_sur_fonction=GetProcAdress(hDll,numéro); , le compilateur me balance une erreur left operand must be l-value , or je ne voit pas ce qui peut le mieux pointé un espace mémoire à part un pointeur ???
(prototype de ma fonction-pointeur: int (*mon_pointeur_sur_fonction)(mes_parametres); )
Si tu ne sais j'en déduirai que mon compilateur a vraiment une dent contre moi...???

-------------------------------
Réponse au message :
-------------------------------

> Quand tu fais une dll tu as d'autre moyen d'exporter des fonctions. Entre autre en faisant un fichier nomdll.def a incorporer dans le projet. Il permet d'exporter tes fonctions au format C standard sans decoration des noms.
> Voila interieur:
> LIBRARY "ServScra"
> DESCRIPTION 'ServScra Windows Dynamic Link Library'
>
> EXPORTS
> IsFreeScrab @10 NONAME
> About @11 NONAME
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > 4ndr&@lphu$
> >
> > j'ai un peu de mal à suivre ta démarche, et c'est koi un fichier def ?? (en msft visual c++ ?)
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Je te mets un exemple, un de mes anciens progs.
> > > Dans la dll:
> > > BOOL IsFreeScrab(const char* pszPath);
> > > exporte grace a fichier def, que je prefere.
> > > Dans prog appelant:
> > > typedef BOOL (*ISFREESCRAB) (const char* pszPath);
> > > ISFREESCRAB IsFreeScrab;
> > > IsFreeScrab = (ISFREESCRAB)GetProcAddress(hDll, (LPCSTR)10);
> > > BOOL bOK = IsFreeScrab(szfile); // licence valide ?
> > > etc...
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > 4ndr&@lphu$
> > > >
> > > > 1)
> > > > en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
> > > > Mais ca je l'ai normalement résolu en remplaçant:
> > > >
> > > > //prototype d'une des fonctions
> > > > int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > >
> > > > par
> > > >
> > > > __declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > >
> > > > 2)
> > > > j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :
> > > >
> > > > pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:
> > > >
> > > > __declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);
> > > >
> > > > ...et lorsque je copile tout ca,
> > > >
> > > > j'obtient l'erreur suivante:
> > > > "error C2106: '=' : left operand must be l-value"
> > > > à la ligne:
> > > > (FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);
> > > >
> > > > SVP AIdez moi je vais craquer...merci d'avence !
> > >
> >
>
lundi 12 mai 2003 à 09:23:03 | Re : utiliser les fonctions d'une DLL

BruNews

Administrateur CodeS-SourceS
Et tu as exactement repris la meme syntaxe que dans mon exemple ? Je n'ai jamais rencontre de prob en procedant ainsi. Verifie bien les declarations.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

>
> 4ndr&@lphu$
>
> c'est ok pour le fichier def mais maintenant on retombe qd meme sur mon premier probleme:
> à la ligne mon_pointeur_sur_fonction=GetProcAdress(hDll,numéro); , le compilateur me balance une erreur left operand must be l-value , or je ne voit pas ce qui peut le mieux pointé un espace mémoire à part un pointeur ???
> (prototype de ma fonction-pointeur: int (*mon_pointeur_sur_fonction)(mes_parametres); )
> Si tu ne sais j'en déduirai que mon compilateur a vraiment une dent contre moi...???
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Quand tu fais une dll tu as d'autre moyen d'exporter des fonctions. Entre autre en faisant un fichier nomdll.def a incorporer dans le projet. Il permet d'exporter tes fonctions au format C standard sans decoration des noms.
> > Voila interieur:
> > LIBRARY "ServScra"
> > DESCRIPTION 'ServScra Windows Dynamic Link Library'
> >
> > EXPORTS
> > IsFreeScrab @10 NONAME
> > About @11 NONAME
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > > 4ndr&@lphu$
> > >
> > > j'ai un peu de mal à suivre ta démarche, et c'est koi un fichier def ?? (en msft visual c++ ?)
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Je te mets un exemple, un de mes anciens progs.
> > > > Dans la dll:
> > > > BOOL IsFreeScrab(const char* pszPath);
> > > > exporte grace a fichier def, que je prefere.
> > > > Dans prog appelant:
> > > > typedef BOOL (*ISFREESCRAB) (const char* pszPath);
> > > > ISFREESCRAB IsFreeScrab;
> > > > IsFreeScrab = (ISFREESCRAB)GetProcAddress(hDll, (LPCSTR)10);
> > > > BOOL bOK = IsFreeScrab(szfile); // licence valide ?
> > > > etc...
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > 4ndr&@lphu$
> > > > >
> > > > > 1)
> > > > > en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
> > > > > Mais ca je l'ai normalement résolu en remplaçant:
> > > > >
> > > > > //prototype d'une des fonctions
> > > > > int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > >
> > > > > par
> > > > >
> > > > > __declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > >
> > > > > 2)
> > > > > j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :
> > > > >
> > > > > pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:
> > > > >
> > > > > __declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);
> > > > >
> > > > > ...et lorsque je copile tout ca,
> > > > >
> > > > > j'obtient l'erreur suivante:
> > > > > "error C2106: '=' : left operand must be l-value"
> > > > > à la ligne:
> > > > > (FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);
> > > > >
> > > > > SVP AIdez moi je vais craquer...merci d'avence !
> > > >
> > >
> >
>
lundi 12 mai 2003 à 10:39:21 | Re : utiliser les fonctions d'une DLL

andrealphus


4ndr&@lphu$


maintenat c'est ok pour mes fonctions, mais j'ai un probleme d'exportation dans le fichier def (j'ai pas mis grand chose encore)
voila mon prog:

mon fichier '.h':
typedef int (*PIDN_OPENCOMM) (IDN_DRVOPEN *p_open);
typedef int (*PIDN_CLOSECOMM) (int ixdrv);

PIDN_OPENCOMM pIDN_OpenComm;
PIDN_CLOSECOMM pIDN_CloseComm;
// ici y a pas de pb

mon fichier '.cpp':
// load librery
hDll = LoadLibrary("idndll.dll");

// get address of function
pIDN_OpenComm = (PIDN_OPENCOMM)GetProcAddress(hDll,(LPCSTR)MAKELPARAM(1,0));

pIDN_CloseComm = (PIDN_CLOSECOMM)GetProcAddress(hDll,(LPCSTR)MAKELPARAM(2,0));
//pas de pb ici non plus

mon fichier '.def':
LIBRARY "ServScra"
DESCRIPTION 'ServScra Windows Dynamic Link Library'

EXPORTS
IDN_OpenComm @MAKELPARAM(1,0) NONAME
IDN_CloseComm @MAKELPARAM(2,0) NONAME
//c'est là que ca déconne...(il me sort:.\idndll.def : fatal error LNK1119: invalid ordinal number "MAKELPARAM(1,0)") ! j'ai fait comme toi sauf que toi c'était un peu plus simple, moi j'ai voulu bricoler un peu...
(attention, les MAKELPARAM(...) du fichier '.cpp' est la seule infos que j'ai concernant les numéros ordinaux de mes fonctions ds ma dll)
j'attends ton aide avec impatience...
et merci d'avance !
-------------------------------
Réponse au message :
-------------------------------

> Et tu as exactement repris la meme syntaxe que dans mon exemple ? Je n'ai jamais rencontre de prob en procedant ainsi. Verifie bien les declarations.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > 4ndr&@lphu$
> >
> > c'est ok pour le fichier def mais maintenant on retombe qd meme sur mon premier probleme:
> > à la ligne mon_pointeur_sur_fonction=GetProcAdress(hDll,numéro); , le compilateur me balance une erreur left operand must be l-value , or je ne voit pas ce qui peut le mieux pointé un espace mémoire à part un pointeur ???
> > (prototype de ma fonction-pointeur: int (*mon_pointeur_sur_fonction)(mes_parametres); )
> > Si tu ne sais j'en déduirai que mon compilateur a vraiment une dent contre moi...???
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Quand tu fais une dll tu as d'autre moyen d'exporter des fonctions. Entre autre en faisant un fichier nomdll.def a incorporer dans le projet. Il permet d'exporter tes fonctions au format C standard sans decoration des noms.
> > > Voila interieur:
> > > LIBRARY "ServScra"
> > > DESCRIPTION 'ServScra Windows Dynamic Link Library'
> > >
> > > EXPORTS
> > > IsFreeScrab @10 NONAME
> > > About @11 NONAME
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > >
> > > > 4ndr&@lphu$
> > > >
> > > > j'ai un peu de mal à suivre ta démarche, et c'est koi un fichier def ?? (en msft visual c++ ?)
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Je te mets un exemple, un de mes anciens progs.
> > > > > Dans la dll:
> > > > > BOOL IsFreeScrab(const char* pszPath);
> > > > > exporte grace a fichier def, que je prefere.
> > > > > Dans prog appelant:
> > > > > typedef BOOL (*ISFREESCRAB) (const char* pszPath);
> > > > > ISFREESCRAB IsFreeScrab;
> > > > > IsFreeScrab = (ISFREESCRAB)GetProcAddress(hDll, (LPCSTR)10);
> > > > > BOOL bOK = IsFreeScrab(szfile); // licence valide ?
> > > > > etc...
> > > > > BruNews, ciao...
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > 4ndr&@lphu$
> > > > > >
> > > > > > 1)
> > > > > > en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
> > > > > > Mais ca je l'ai normalement résolu en remplaçant:
> > > > > >
> > > > > > //prototype d'une des fonctions
> > > > > > int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > > >
> > > > > > par
> > > > > >
> > > > > > __declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > > >
> > > > > > 2)
> > > > > > j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :
> > > > > >
> > > > > > pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:
> > > > > >
> > > > > > __declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);
> > > > > >
> > > > > > ...et lorsque je copile tout ca,
> > > > > >
> > > > > > j'obtient l'erreur suivante:
> > > > > > "error C2106: '=' : left operand must be l-value"
> > > > > > à la ligne:
> > > > > > (FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);
> > > > > >
> > > > > > SVP AIdez moi je vais craquer...merci d'avence !
> > > > >
> > > >
> > >
> >
>
lundi 12 mai 2003 à 10:50:02 | Re : utiliser les fonctions d'une DLL

BruNews

Administrateur CodeS-SourceS
MAKELPARAM est invalide dans un def. Mets direct le resultat.
MAKELPARAM est une macro pour le compilo, pas pour le linker.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

>
> 4ndr&@lphu$
>
>
> maintenat c'est ok pour mes fonctions, mais j'ai un probleme d'exportation dans le fichier def (j'ai pas mis grand chose encore)
> voila mon prog:
>
> mon fichier '.h':
> typedef int (*PIDN_OPENCOMM) (IDN_DRVOPEN *p_open);
> typedef int (*PIDN_CLOSECOMM) (int ixdrv);
>
> PIDN_OPENCOMM pIDN_OpenComm;
> PIDN_CLOSECOMM pIDN_CloseComm;
> // ici y a pas de pb
>
> mon fichier '.cpp':
> // load librery
> hDll = LoadLibrary("idndll.dll");
>
> // get address of function
> pIDN_OpenComm = (PIDN_OPENCOMM)GetProcAddress(hDll,(LPCSTR)MAKELPARAM(1,0));
>
> pIDN_CloseComm = (PIDN_CLOSECOMM)GetProcAddress(hDll,(LPCSTR)MAKELPARAM(2,0));
> //pas de pb ici non plus
>
> mon fichier '.def':
> LIBRARY "ServScra"
> DESCRIPTION 'ServScra Windows Dynamic Link Library'
>
> EXPORTS
> IDN_OpenComm @MAKELPARAM(1,0) NONAME
> IDN_CloseComm @MAKELPARAM(2,0) NONAME
> //c'est là que ca déconne...(il me sort:.\idndll.def : fatal error LNK1119: invalid ordinal number "MAKELPARAM(1,0)") ! j'ai fait comme toi sauf que toi c'était un peu plus simple, moi j'ai voulu bricoler un peu...
> (attention, les MAKELPARAM(...) du fichier '.cpp' est la seule infos que j'ai concernant les numéros ordinaux de mes fonctions ds ma dll)
> j'attends ton aide avec impatience...
> et merci d'avance !
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Et tu as exactement repris la meme syntaxe que dans mon exemple ? Je n'ai jamais rencontre de prob en procedant ainsi. Verifie bien les declarations.
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > > 4ndr&@lphu$
> > >
> > > c'est ok pour le fichier def mais maintenant on retombe qd meme sur mon premier probleme:
> > > à la ligne mon_pointeur_sur_fonction=GetProcAdress(hDll,numéro); , le compilateur me balance une erreur left operand must be l-value , or je ne voit pas ce qui peut le mieux pointé un espace mémoire à part un pointeur ???
> > > (prototype de ma fonction-pointeur: int (*mon_pointeur_sur_fonction)(mes_parametres); )
> > > Si tu ne sais j'en déduirai que mon compilateur a vraiment une dent contre moi...???
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Quand tu fais une dll tu as d'autre moyen d'exporter des fonctions. Entre autre en faisant un fichier nomdll.def a incorporer dans le projet. Il permet d'exporter tes fonctions au format C standard sans decoration des noms.
> > > > Voila interieur:
> > > > LIBRARY "ServScra"
> > > > DESCRIPTION 'ServScra Windows Dynamic Link Library'
> > > >
> > > > EXPORTS
> > > > IsFreeScrab @10 NONAME
> > > > About @11 NONAME
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > >
> > > > > 4ndr&@lphu$
> > > > >
> > > > > j'ai un peu de mal à suivre ta démarche, et c'est koi un fichier def ?? (en msft visual c++ ?)
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Je te mets un exemple, un de mes anciens progs.
> > > > > > Dans la dll:
> > > > > > BOOL IsFreeScrab(const char* pszPath);
> > > > > > exporte grace a fichier def, que je prefere.
> > > > > > Dans prog appelant:
> > > > > > typedef BOOL (*ISFREESCRAB) (const char* pszPath);
> > > > > > ISFREESCRAB IsFreeScrab;
> > > > > > IsFreeScrab = (ISFREESCRAB)GetProcAddress(hDll, (LPCSTR)10);
> > > > > > BOOL bOK = IsFreeScrab(szfile); // licence valide ?
> > > > > > etc...
> > > > > > BruNews, ciao...
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > 4ndr&@lphu$
> > > > > > >
> > > > > > > 1)
> > > > > > > en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
> > > > > > > Mais ca je l'ai normalement résolu en remplaçant:
> > > > > > >
> > > > > > > //prototype d'une des fonctions
> > > > > > > int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > > > >
> > > > > > > par
> > > > > > >
> > > > > > > __declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > > > >
> > > > > > > 2)
> > > > > > > j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :
> > > > > > >
> > > > > > > pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:
> > > > > > >
> > > > > > > __declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);
> > > > > > >
> > > > > > > ...et lorsque je copile tout ca,
> > > > > > >
> > > > > > > j'obtient l'erreur suivante:
> > > > > > > "error C2106: '=' : left operand must be l-value"
> > > > > > > à la ligne:
> > > > > > > (FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);
> > > > > > >
> > > > > > > SVP AIdez moi je vais craquer...merci d'avence !
> > > > > >
> > > > >
> > > >
> > >
> >
>
lundi 12 mai 2003 à 11:16:50 | Re : utiliser les fonctions d'une DLL

andrealphus


4ndr&@lphu$

je veux bien mais j'aimerais bien savoir comment je peux obtenir le résultats d'un truc si je ne peux pas le faire ???

-------------------------------
Réponse au message :
-------------------------------

> MAKELPARAM est invalide dans un def. Mets direct le resultat.
> MAKELPARAM est une macro pour le compilo, pas pour le linker.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > 4ndr&@lphu$
> >
> >
> > maintenat c'est ok pour mes fonctions, mais j'ai un probleme d'exportation dans le fichier def (j'ai pas mis grand chose encore)
> > voila mon prog:
> >
> > mon fichier '.h':
> > typedef int (*PIDN_OPENCOMM) (IDN_DRVOPEN *p_open);
> > typedef int (*PIDN_CLOSECOMM) (int ixdrv);
> >
> > PIDN_OPENCOMM pIDN_OpenComm;
> > PIDN_CLOSECOMM pIDN_CloseComm;
> > // ici y a pas de pb
> >
> > mon fichier '.cpp':
> > // load librery
> > hDll = LoadLibrary("idndll.dll");
> >
> > // get address of function
> > pIDN_OpenComm = (PIDN_OPENCOMM)GetProcAddress(hDll,(LPCSTR)MAKELPARAM(1,0));
> >
> > pIDN_CloseComm = (PIDN_CLOSECOMM)GetProcAddress(hDll,(LPCSTR)MAKELPARAM(2,0));
> > //pas de pb ici non plus
> >
> > mon fichier '.def':
> > LIBRARY "ServScra"
> > DESCRIPTION 'ServScra Windows Dynamic Link Library'
> >
> > EXPORTS
> > IDN_OpenComm @MAKELPARAM(1,0) NONAME
> > IDN_CloseComm @MAKELPARAM(2,0) NONAME
> > //c'est là que ca déconne...(il me sort:.\idndll.def : fatal error LNK1119: invalid ordinal number "MAKELPARAM(1,0)") ! j'ai fait comme toi sauf que toi c'était un peu plus simple, moi j'ai voulu bricoler un peu...
> > (attention, les MAKELPARAM(...) du fichier '.cpp' est la seule infos que j'ai concernant les numéros ordinaux de mes fonctions ds ma dll)
> > j'attends ton aide avec impatience...
> > et merci d'avance !
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Et tu as exactement repris la meme syntaxe que dans mon exemple ? Je n'ai jamais rencontre de prob en procedant ainsi. Verifie bien les declarations.
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > >
> > > > 4ndr&@lphu$
> > > >
> > > > c'est ok pour le fichier def mais maintenant on retombe qd meme sur mon premier probleme:
> > > > à la ligne mon_pointeur_sur_fonction=GetProcAdress(hDll,numéro); , le compilateur me balance une erreur left operand must be l-value , or je ne voit pas ce qui peut le mieux pointé un espace mémoire à part un pointeur ???
> > > > (prototype de ma fonction-pointeur: int (*mon_pointeur_sur_fonction)(mes_parametres); )
> > > > Si tu ne sais j'en déduirai que mon compilateur a vraiment une dent contre moi...???
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Quand tu fais une dll tu as d'autre moyen d'exporter des fonctions. Entre autre en faisant un fichier nomdll.def a incorporer dans le projet. Il permet d'exporter tes fonctions au format C standard sans decoration des noms.
> > > > > Voila interieur:
> > > > > LIBRARY "ServScra"
> > > > > DESCRIPTION 'ServScra Windows Dynamic Link Library'
> > > > >
> > > > > EXPORTS
> > > > > IsFreeScrab @10 NONAME
> > > > > About @11 NONAME
> > > > > BruNews, ciao...
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > >
> > > > > > 4ndr&@lphu$
> > > > > >
> > > > > > j'ai un peu de mal à suivre ta démarche, et c'est koi un fichier def ?? (en msft visual c++ ?)
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > Je te mets un exemple, un de mes anciens progs.
> > > > > > > Dans la dll:
> > > > > > > BOOL IsFreeScrab(const char* pszPath);
> > > > > > > exporte grace a fichier def, que je prefere.
> > > > > > > Dans prog appelant:
> > > > > > > typedef BOOL (*ISFREESCRAB) (const char* pszPath);
> > > > > > > ISFREESCRAB IsFreeScrab;
> > > > > > > IsFreeScrab = (ISFREESCRAB)GetProcAddress(hDll, (LPCSTR)10);
> > > > > > > BOOL bOK = IsFreeScrab(szfile); // licence valide ?
> > > > > > > etc...
> > > > > > > BruNews, ciao...
> > > > > > >
> > > > > > >
> > > > > > > -------------------------------
> > > > > > > Réponse au message :
> > > > > > > -------------------------------
> > > > > > >
> > > > > > > > 4ndr&@lphu$
> > > > > > > >
> > > > > > > > 1)
> > > > > > > > en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
> > > > > > > > Mais ca je l'ai normalement résolu en remplaçant:
> > > > > > > >
> > > > > > > > //prototype d'une des fonctions
> > > > > > > > int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > > > > >
> > > > > > > > par
> > > > > > > >
> > > > > > > > __declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > > > > >
> > > > > > > > 2)
> > > > > > > > j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :
> > > > > > > >
> > > > > > > > pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:
> > > > > > > >
> > > > > > > > __declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);
> > > > > > > >
> > > > > > > > ...et lorsque je copile tout ca,
> > > > > > > >
> > > > > > > > j'obtient l'erreur suivante:
> > > > > > > > "error C2106: '=' : left operand must be l-value"
> > > > > > > > à la ligne:
> > > > > > > > (FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);
> > > > > > > >
> > > > > > > > SVP AIdez moi je vais craquer...merci d'avence !
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
lundi 12 mai 2003 à 11:32:40 | Re : utiliser les fonctions d'une DLL

BruNews

Administrateur CodeS-SourceS
Si tu veux les appeler en mode ordinaire par nom tu enleves NONAME.
Change aussi "ServScra" par un nom a toi.
EXPORTS
IDN_OpenComm @1
IDN_CloseComm @2
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

>
> 4ndr&@lphu$
>
> je veux bien mais j'aimerais bien savoir comment je peux obtenir le résultats d'un truc si je ne peux pas le faire ???
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > MAKELPARAM est invalide dans un def. Mets direct le resultat.
> > MAKELPARAM est une macro pour le compilo, pas pour le linker.
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > > 4ndr&@lphu$
> > >
> > >
> > > maintenat c'est ok pour mes fonctions, mais j'ai un probleme d'exportation dans le fichier def (j'ai pas mis grand chose encore)
> > > voila mon prog:
> > >
> > > mon fichier '.h':
> > > typedef int (*PIDN_OPENCOMM) (IDN_DRVOPEN *p_open);
> > > typedef int (*PIDN_CLOSECOMM) (int ixdrv);
> > >
> > > PIDN_OPENCOMM pIDN_OpenComm;
> > > PIDN_CLOSECOMM pIDN_CloseComm;
> > > // ici y a pas de pb
> > >
> > > mon fichier '.cpp':
> > > // load librery
> > > hDll = LoadLibrary("idndll.dll");
> > >
> > > // get address of function
> > > pIDN_OpenComm = (PIDN_OPENCOMM)GetProcAddress(hDll,(LPCSTR)MAKELPARAM(1,0));
> > >
> > > pIDN_CloseComm = (PIDN_CLOSECOMM)GetProcAddress(hDll,(LPCSTR)MAKELPARAM(2,0));
> > > //pas de pb ici non plus
> > >
> > > mon fichier '.def':
> > > LIBRARY "ServScra"
> > > DESCRIPTION 'ServScra Windows Dynamic Link Library'
> > >
> > > EXPORTS
> > > IDN_OpenComm @MAKELPARAM(1,0) NONAME
> > > IDN_CloseComm @MAKELPARAM(2,0) NONAME
> > > //c'est là que ca déconne...(il me sort:.\idndll.def : fatal error LNK1119: invalid ordinal number "MAKELPARAM(1,0)") ! j'ai fait comme toi sauf que toi c'était un peu plus simple, moi j'ai voulu bricoler un peu...
> > > (attention, les MAKELPARAM(...) du fichier '.cpp' est la seule infos que j'ai concernant les numéros ordinaux de mes fonctions ds ma dll)
> > > j'attends ton aide avec impatience...
> > > et merci d'avance !
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Et tu as exactement repris la meme syntaxe que dans mon exemple ? Je n'ai jamais rencontre de prob en procedant ainsi. Verifie bien les declarations.
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > >
> > > > > 4ndr&@lphu$
> > > > >
> > > > > c'est ok pour le fichier def mais maintenant on retombe qd meme sur mon premier probleme:
> > > > > à la ligne mon_pointeur_sur_fonction=GetProcAdress(hDll,numéro); , le compilateur me balance une erreur left operand must be l-value , or je ne voit pas ce qui peut le mieux pointé un espace mémoire à part un pointeur ???
> > > > > (prototype de ma fonction-pointeur: int (*mon_pointeur_sur_fonction)(mes_parametres); )
> > > > > Si tu ne sais j'en déduirai que mon compilateur a vraiment une dent contre moi...???
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Quand tu fais une dll tu as d'autre moyen d'exporter des fonctions. Entre autre en faisant un fichier nomdll.def a incorporer dans le projet. Il permet d'exporter tes fonctions au format C standard sans decoration des noms.
> > > > > > Voila interieur:
> > > > > > LIBRARY "ServScra"
> > > > > > DESCRIPTION 'ServScra Windows Dynamic Link Library'
> > > > > >
> > > > > > EXPORTS
> > > > > > IsFreeScrab @10 NONAME
> > > > > > About @11 NONAME
> > > > > > BruNews, ciao...
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > >
> > > > > > > 4ndr&@lphu$
> > > > > > >
> > > > > > > j'ai un peu de mal à suivre ta démarche, et c'est koi un fichier def ?? (en msft visual c++ ?)
> > > > > > >
> > > > > > > -------------------------------
> > > > > > > Réponse au message :
> > > > > > > -------------------------------
> > > > > > >
> > > > > > > > Je te mets un exemple, un de mes anciens progs.
> > > > > > > > Dans la dll:
> > > > > > > > BOOL IsFreeScrab(const char* pszPath);
> > > > > > > > exporte grace a fichier def, que je prefere.
> > > > > > > > Dans prog appelant:
> > > > > > > > typedef BOOL (*ISFREESCRAB) (const char* pszPath);
> > > > > > > > ISFREESCRAB IsFreeScrab;
> > > > > > > > IsFreeScrab = (ISFREESCRAB)GetProcAddress(hDll, (LPCSTR)10);
> > > > > > > > BOOL bOK = IsFreeScrab(szfile); // licence valide ?
> > > > > > > > etc...
> > > > > > > > BruNews, ciao...
> > > > > > > >
> > > > > > > >
> > > > > > > > -------------------------------
> > > > > > > > Réponse au message :
> > > > > > > > -------------------------------
> > > > > > > >
> > > > > > > > > 4ndr&@lphu$
> > > > > > > > >
> > > > > > > > > 1)
> > > > > > > > > en fait j'ai un premier probleme d'incompatiblité de mon include qui est fait avec borland et de mon programme avec VC++ 6.0.
> > > > > > > > > Mais ca je l'ai normalement résolu en remplaçant:
> > > > > > > > >
> > > > > > > > > //prototype d'une des fonctions
> > > > > > > > > int FUNEXP IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > > > > > >
> > > > > > > > > par
> > > > > > > > >
> > > > > > > > > __declspec( dllexport ) int IDN_OpenComm(IDN_DRVOPEN *idn_drvopen);
> > > > > > > > >
> > > > > > > > > 2)
> > > > > > > > > j'ai aussi chargé ma dll avec loadlibrary et utilisé getprocadress mais c'est justement sur ce dernier point que "ca se gate :
> > > > > > > > >
> > > > > > > > > pour la fonction que j'ai mis dans l'exemple, j'ai créer un pointeur:
> > > > > > > > >
> > > > > > > > > __declspec( export ) int (*pIDN_OpenComm)(IDN_DRVOPEN *idn_drvopen);
> > > > > > > > >
> > > > > > > > > ...et lorsque je copile tout ca,
> > > > > > > > >
> > > > > > > > > j'obtient l'erreur suivante:
> > > > > > > > > "error C2106: '=' : left operand must be l-value"
> > > > > > > > > à la ligne:
> > > > > > > > > (FARPROC)pIDN_OpenComm=GetProcAdress(hDll,...);
> > > > > > > > >
> > > > > > > > > SVP AIdez moi je vais craquer...merci d'avence !
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

1 2

Cette discussion est classée dans : dll, fonctions, idn, drvopen, opencomm


Répondre à ce message

Sujets en rapport avec ce message

in_mp3.dll +HELP [ par Manson ] Salut a tous,voila, la dll in_mp3.dll renferme les fonctions necessaaire au decodage de mp3. Je n'arrive pas a trouver ces fonctions sur le net, et po Appel de fonctions dans une dll [ par sena ] Bonjour,j'ai un pb un peu bizarre.j'ai créer des fonctions dans une dll.j'utilise __declspec(dllexport) pour dire qu'il faut exporter ces fonctions.Ex LEs Dll, je comprends rien !!! [ par rintchu ] Salut ,j'ai de gros probleme avec les dll.En fait j'ai créé une DLL avec plein de fonctions qui utilise des poointeurs et des structures compliquées. Appel dll VB6 à partir de C++ [ par stof35 ] Bonjour,Je dois réaliser l'intégration d'une DLL écrite en VB6 par un prestataire externe dans un projet C++. J'ai essayé par des moyens classiques ma Les fonctions d'une DLL [ par garslouche ] Salut,je voudrais pourvoir connaitre les fonctions externes d'une DLL (comme le fait l'outil Depends de VC++).Idéalement j'aimerais aussi voir le type Problème de création de dll !! (C++ Builder) [ par SibosisITS ] J'ai la procédure d'entrée de la dll, j'ai écris mes fonctions, mais là ou je coince, c'est pour les arguments à mettre dans l'en-tête de mes fonction Comment utiliser une DLL tiers? [ par StefB ] Bonjour a tous,QUESTIONS : - Comment utiliser les classes, varaibles, constantes et fonctions dans une DLL sous VC++?- Est-ce t'il existe un tutoriel Comment utiliser une DLL tiers ? [ par StefB ] Bonjour a tous,QUESTIONS : - Comment utiliser les classes, varaibles, constantes et fonctions dans une DLL sous VC++?- Est-ce t'il existe un tutoriel Liste des fonctions exportées dans une dll ??? [ par elixir2 ] Comment trouver la liste des fonctions exportées d'une dll à partir d'une application C++ ?Il y a t'il une méthode pour que l'application puisse conna DLL [ par Lorelei42 ] Bonjour,J'ai un progamme assez conséquent en C et on m'a demandé d'en faire une DLL. J'aurai besoin de quelques conseils notamment pour le choix des f


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales