begin process at 2012 05 30 00:02:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

linker une dll sous dev-c++


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

linker une dll sous dev-c++

vendredi 13 mai 2005 à 17:42:24 | linker une dll sous dev-c++

the diouk

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 `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

Easy love Baby
vendredi 13 mai 2005 à 18:48:28 | Re : linker une dll sous dev-c++

vecchio56

Administrateur CodeS-SourceS
Je ne vois pas a quoi peut bien servir ton défine...
Je n'ai pas très bien compris, tu veux utiliser une DLL dans ton projet c'est ca?
Dans ce cas il te faut effectivement la lib correspondante, sinon tu dois aller chercher les fonctions toit même dans la DLL avec GetProcAdress
Exemple:http://www.cppfrance.com/code.aspx?ID=24723

lundi 16 mai 2005 à 11:56:59 | Re : linker une dll sous dev-c++
lundi 16 mai 2005 à 12:02:25 | Re : linker une dll sous dev-c++

the diouk


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

merci d'avance

 #include <iostream>
#include <stdlib.h>
#include<myconio.h>
#include<windows.h>

#ifdef __cplusplus
extern "C" {
#endif


#define IgorUSBDLL "IgorUSB.dll";
 
#define NO_ERROR 0;
#define DEVICE_NOT_PRESENT 1;
#define NO_DATA_AVAILABLE 2;
#define INVALID_BAUDRATE 3;
#define OVERRUN_ERROR 4;

//int __stdcall DoGetInDataPort(unsigned char * DataInByte);
//int __stdcall DoSetDataPortDirection(unsigned char DirectionByte);
//int __stdcall DoSetRS232Baud (int BaudRate);
//int __stdcall DoGetRS232Baud(int * BaudRate);

#ifdef __cplusplus
}
#endif

typedef INT (CALLBACK* DLLFUNC1)(INT);


HINSTANCE hDLL;
DLLFUNC1 DllFunc1;

main(void)
{
    int j=9600,i=0;
    hDLL = LoadLibrary("IgorUSBDLL");
    if (hDLL != NULL)
    {
       DllFunc1 = (DLLFUNC1)GetProcAddress(hDLL, "DoSetRS232Baud");
       if (!DllFunc1)FreeLibrary(hDLL);
      
       else i = DllFunc1(j);
    }
   
//    i=DoSetRS232Baud(j);
    printf("%d", j);
    getch();
    printf("%s",i);
    getch();
}   

y a pas mal de truc en commentaire car je n'arrête pas de tecter différentes possibilités d'appels de fonction 
Easy love Baby

lundi 16 mai 2005 à 14:20:01 | Re : linker une dll sous dev-c++

vecchio56

Administrateur CodeS-SourceS
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.
Ce code devrait t'aider:
http://www.cppfrance.com/code.aspx?ID=25603
Tu peux aussi lire ceci:
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_.2f.gd.2c_2f.gr.2c_2f.gz.asp

A partir du moment ou GetProcAdress te donne une valeur non nulle, c'est que la fonction à été bien trouvée

lundi 16 mai 2005 à 15:41:07 | Re : linker une dll sous dev-c++

the diouk


justement comment connaîs tu la valeur de retour de GetProcAddress ? là je fais

if (hDLL != NULL)
    {
       DllFunc1 = (DLLFUNC1)GetProcAddress(hDLL, "_DoSetRS232Baud@3");
       if (!DllFunc1)
       {
           FreeLibrary(hDLL);
           printf("çà a foirré");
           getch();
       }   
      
       else i = DllFunc1(9600);
    }
et ça passe, mais même quand je modifie _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
lundi 16 mai 2005 à 16:32:38 | Re : linker une dll sous dev-c++

vecchio56

Administrateur CodeS-SourceS
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.
Est-ce que la DllFunc1 marche bien?

lundi 16 mai 2005 à 17:19:03 | Re : linker une dll sous dev-c++

the diouk

   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...

Easy love Baby
lundi 16 mai 2005 à 17:37:34 | Re : linker une dll sous dev-c++

the diouk

 je viens de faire une avancée : en fait il n'ouvrait même pas la DLL, comme un C . N j'avais mal marqué le nom.

 mais il y a toujours ce problème de nom fonction, je continu mes essais....

Easy love Baby
lundi 16 mai 2005 à 17:51:31 | Re : linker une dll sous dev-c++

the diouk

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...

Easy love Baby


Cette discussion est classée dans : fonction, int, dll, dev, linker


Répondre à ce message

Sujets en rapport avec ce message

dev c++ Api & dll [ par pounch ] Tout d'abord lu a tous comme j'en avais marre de chercher tout seul dans mon coin, ben j'a decidé de veindre Bon voila mon pr Pour les doués, moi j'en peu plus ! [ par sena ] Salutje voudrais en fait faire un passage de paramètre a une fonction dont un a une valeur par défaut. (puis inclure ca dnas une DLL)Par exemple une f Uttilisation la fonction d'une DLL [ par aDebhian ] Pour ce faire, j'ai lu msdn, codes-sources et j'en suis arrivé à ceci: [FONCTION DLL] extern "C" __declspec(dllexport) int tests(int test) {     retu Problème d'appel de fonction d'une DLL en C [ par richard22 ] Bonjour Voici mon problème: je réalise une DLL avec cette fonction: DLLIMPORT int Algo(int **result) {    etc...    } et dans un fichier .h : #ifn probleme de dll [ par lamoueste ] j'ai un probleme avec ma dll : il s'agit d'une fonction qui doit lance une fenetre (dialog box ) en modal mais j'ai une "assertion failed" :( et je ne Appel d'une fonction contenue dans une dll [ par ybuchheit ] Bonjour, je souhaiterais appeler une fonction contenue dans une dll. Je n'ai pas le source de cette dll, le seul fichier dont je dispose est le .dll pointeur sur une fonction [ par pasty ] Bonjour,J'appelle une fonction f(int *,int *,int) dont le code  est dans un DLL depuis le programme principal main.cpp Je déclare la fonction dans m Pb Hook.... [ par Mr_Coinche ] Bonjour,J'ai crée une dll très simple appelée "DllMaths.dll", qui contient deux fonctions, "carre" et "cube", je vous laisse deviner ce que ces foncti Transformation int--->Array [ par fonsm1 ] Voilà j'ai un programme où je dois tester une fonction dont les arguments sont des strings de chiffre ou chaque chiffre prend une position dans le tab [WinAPI] fonctions graphiques [ par riked ] Bonjour (ou bonsoir), Je suis nouveau sur cppfrance et je vient vous exposer mon problème. Je fait actuellement un programme qui à pour but d'affich


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,326 sec (3)

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