the diouk
Messages postés21Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention25 mai 2005
-
13 mai 2005 à 17:42
the diouk
Messages postés21Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention25 mai 2005
-
16 mai 2005 à 17:51
petite question toute bête mais qui me gêne :
j'utilise une DLL, dans ma source il y a bien :
#define TRUCDLL "TRUC.dll";
le prototype de la fonction :
int __stdcall Bidule(int trucmuche);
j'ai fait projet/option du projet/paramètres et dans l'éditeur de lien j'ai cherché ma dll mais je me demande si c'est bien là vu qu'il propose des .lib , mais sinon je sais pas ou il faut linker.....
en tout cas çà marche pas : quand j'appel la fonction il me met :
[Linker error] undefined reference to [mailto:`Bidule@4' `Bidule@4']
donc pour lui elle n'est pas linkée ? ou je l'appelle mal ??
merci si quelqu'un peut me donner un coup de pousse
the diouk
Messages postés21Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention25 mai 20051 16 mai 2005 à 12:02
effectivement je doit utiliser tout ce qui est getprocaddress, loadlibrary...
j'ai regardé ton exemple, mais je dois bien avoué que je n'est rien compris, alors j'ai cherché des tutoriaux, je pensais avoir réussi mais la fonction ne renvoi rien ou alors elle n'est même pas appelée
peux-tu regardé si mon prog de test est a peu près correct stp car moi je ne vois pas d'erreur flagrante
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 16 mai 2005 à 14:20
Ca dépend de la manière dont sont écrit les fonctions de la DLL
(__stdcall, __fastcall ou __cdecl). En __stdcall le nom des fonctions
est modifié: une fonction f qui prend des arguments de taille n sera
décorée en _f@n.
the diouk
Messages postés21Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention25 mai 20051 16 mai 2005 à 15:41
justement comment connaîs tu la valeur de retour de GetProcAddress ? là je fais
if (hDLL != NULL)
{
DllFunc1 = (DLLFUNC1)GetProcAddress(hDLL, "[mailto:_DoSetRS232Baud@3 _DoSetRS232Baud@3]");
if (!DllFunc1)
{
FreeLibrary(hDLL);
printf("çà a foirré");
getch();
}
else i = DllFunc1(9600);
}
et ça passe, mais même quand je modifie [mailto:_DoSetRS232Baud@3 _DoSetRS232Baud@3] il ne me marque pas que ça a foirré, et après i est toujours égal à zéro alors qu'il ne devrai pas.
d'ailleurs j'ai vu qu'il y avait un fichier .sys pour la communication par usb, faut-t-il que je le linke ( et alors comment linker un .sys ? ) où alors tu crois que c'est la DLL qui va s'en servir toute seule comme une grande ?
j'avoue que je suis un peu perdu avec touts ces trucs
merci déjà pour touts tes conseils, je suis en train de regarder les exemples même si c'est encore un peu du chinois je situe mieux comment ça marche
Easy love Baby
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 16 mai 2005 à 16:32
Pour connaitre la valeur de GetProcAdress, tu peux faire comme tu as fait: if(!DllFunc1) erreur...
Par contre c'est ton @3 qui m'étonne, a priori on a plutot des
multiples de 4. Pour le fichier sys, je sais pas comment ca se passe
mais a mon avis tu n'a pas à l'utiliser.
the diouk
Messages postés21Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention25 mai 20051 16 mai 2005 à 17:19
oui, je pense aussi que c'est un @4, c'était justement pour montrer que peut importe le nom que je donne à la fonction que j'appel, il me met jamais erreur pourtant si le nom n'est pas correct GetProcAdress devrai renvoyer NULL et donc je devrai voir que j'ai une erreur.
Et justement DllFunc1 renvoi toujour 0 ce qui signifie normalement que la fonction s'est exécutée sans problème or cette fonction communique par USB et j'ai fait exprès de ne pas le brancher, donc en toute logique si ça marchait il m'indiquerait DEVICE_NOT_PRESENT
tu ( je me permais de te tutoyer si ça ne te pose pas de problème ) ne crois pas que c'est GetProcAddress qui pose problème, je me demande si c'est la bonne méthode, mais en même temps vu que j'ai que le fichier Dll je ne vois pas d'autres méthodes
si ça peut te dire quelque chose, voici comment l'auteur de la DLL explique l'utilisation vite fait :
By this way we had successfully installed device IgorPlug-USB (AVR). And we can go to test it. For this purpose I had written DLL library "IgorUSB.dll", which contains functions, which device IgorPlug-USB (AVR) makes. This DLL library communicates with driver "IgorPlug.sys" and provide serialization of communication (when we are using DLL from more threads or applications). Library DLL is primary dedicated for programmers of end user applications for access to device: exported functions from DLL are published.
enfin voila, moi ça me dit rien de plus sur comment faire marcher ce truc...
the diouk
Messages postés21Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention25 mai 20051 16 mai 2005 à 17:51
allélouiah il y a un dieu pour forçonnés : en fait après avoir réglé le nom de la DLL, j'ai essayé sans coloration sur la fonction et ça MARCHE DU TONNERRE DE BREST
merci pour tes précieux exemples et conceils, a bientôt j'espère ( en même temps pas trop car ça voudra sans doute dire que je serais en train de galéré),en tout cas bonne continuation...