cs_andrealphus
Messages postés46Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention21 décembre 2004
-
9 mai 2003 à 12:29
cs_andrealphus
Messages postés46Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention21 décembre 2004
-
12 mai 2003 à 15:28
[mailto:david.leguillon@voila.fr 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,...);
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 9 mai 2003 à 12:43
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...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 9 mai 2003 à 16:26
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...
cs_andrealphus
Messages postés46Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention21 décembre 2004 12 mai 2003 à 08:55
[mailto:david.leguillon@voila.fr 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...???
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 mai 2003 à 09:23
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...
// 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 !
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 mai 2003 à 11:32
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...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 mai 2003 à 11:48
Quel MAKELPARAM du cpp ?
voici un truc + recent, calcul nombres infinis pour VB passes en string:
dans le cpp de dll:
long __stdcall bnAdd(BSTR *a, BSTR *b)
{
.....
}
et les autres du meme genre.
dans le def:
LIBRARY bnMaths
EXPORTS
bnCompare @1
bnAdd @2
bnSub @3
bnMul @4
bnDiv @5
BruNews, ciao...
cs_andrealphus
Messages postés46Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention21 décembre 2004 12 mai 2003 à 12:28
[mailto:david.leguillon@voila.fr 4ndr&@lphu$]
{###j'ai l'impression que je ne vais jamis en voir la fin###}
récapitulons:
le MAKELPARAM se situe ds mon fichier'.cpp' ds le GetProcAddress (voir quelques messages + bas)
en sachant les 2 définition suivantes:
1)define MAKELPARAM(l,h) (LPARAM)MAKELONG(l,h)
2)#define MAKELONG(a, b) ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
ensuite, je préfèrerai faire avec ca si ca ne te dérange pas parce que je commence à avoir l'impression de tourner en rond pour untruc qui parait pourtant assez simple!
donc peux tu STP m'expliquer comment je doit faire mon def et mon getprocaddress à partir de ce qu je t'ai dis dans mes 4 à 5 dernier msg.
je te remercie d'avance tres sincerement et je m'excuse si je ne suis pas toujours tres clair et si j'es vraiment beaucoup de mal!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 mai 2003 à 14:22
deja compile toujours en release.
Le prob est bien a la compile de la dll ?
Si encore prob, tu me zip le cpp et le def que je le compile chez moi, jamais vu qu'une dll voulait pas se faire. Doit y avoir autre chose.
bnutiles@wanadoo.fr
BruNews, ciao...
cs_andrealphus
Messages postés46Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention21 décembre 2004 12 mai 2003 à 14:45
[mailto:david.leguillon@voila.fr 4ndr&@lphu$]
non Scuz, j'avais laisser une mauvaise méthode dans un des '.h', il devait y avoir un conflit. Maintenant j'ai 0 error à la compile, j'ai plus qu'à testé ma liaison.
merci et à la prochaine
(si tu veux bien revoir mon probleme sur les registres ca m'arrangerai...)
cs_andrealphus
Messages postés46Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention21 décembre 2004 12 mai 2003 à 15:28
[mailto:david.leguillon@voila.fr 4ndr&@lphu$]
attends un peu la G un probleme avec le fichier '.def',
il faut le mettre ou ? moi je l'est intercaler dans mon projet mais le compilateur m'a sortie une erreur 193 (could not execute: Bed executable format), sais tu ou je dois l'insérer pour faire fonctionner corrctement mon proG ??