Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1608 connectés 

  FORUM HardWare.fr
  Programmation

  [DLL + VC] comment on utilise une DLL qu'on a créé ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[DLL + VC] comment on utilise une DLL qu'on a créé ?

n°170351
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 11:33:47  profilanswer
 

J'ai une DLL avec une fonction du type char* nom_fonction(char* chaine).
 
Sachant que je pars de 0 avec VC et que j'ai ma dll et le .lib associé et le source aussi (au cas où). Que dois je faire pour utiliser cette dll ?
 
1° Un nouveau projet je pense.
2° Declaration de la fonction externe ?
3° Inclusion quelconque (en rapport avec la dll) ?
4° ?
...
X° Compiler la mini aplli qui fait juste un appel à la dll. (transfert d'une chaine de caracteres, et affiche de la chaine retournee par la fonction).
 
PS : au cas ou, la dll possede un mode debug et créée un fichier .log a chaque chargement (d'elle meme).


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
mood
Publicité
Posté le 03-07-2002 à 11:33:47  profilanswer
 

n°170357
LetoII
Le dormeur doit se réveiller
Posté le 03-07-2002 à 11:35:34  profilanswer
 

Je pense que tu doit avoir à inclure le .lib de la DLL dans ton projet.


---------------
Le Tyran
n°170395
smaragdus
whores, drugs & J.S. Bach
Posté le 03-07-2002 à 12:11:12  profilanswer
 

Tu n'as pas précisé si  
* tu faisais un lien implicte ou explicite ?
* DLL : win32 ou MFC ?
* declspec(dllimport) + header ou bien GetProcAdress ?
 

n°170396
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 12:11:41  profilanswer
 

letoII a écrit a écrit :

Je pense que tu doit avoir à inclure le .lib de la DLL dans ton projet.




 
Ouais ça c'est bon.
 
Mais j'ai oublié de déclarer ma fonction dans la dll pour qu'elle soit externe (accessible depuis l'exterieur), que faut-il faire ?


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170398
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 12:12:55  profilanswer
 

Smaragdus a écrit a écrit :

Tu n'as pas précisé si  
* tu faisais un lien implicte ou explicite ?
* DLL : win32 ou MFC ?
* declspec(dllimport) + header ou bien GetProcAdress ?




 
tu faisais un lien implicte ou explicite : en françis ça donne quoi ?
DLL : Win32
Ben plutot ça : "declspec(dllimport) + header "


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170399
bjone
Insert booze to continue
Posté le 03-07-2002 à 12:16:52  profilanswer
 

je dirais:
 
Implicite:
 
Tu rajoutes le petit .LIB généré à la compilation de la DLL, dans le projet de l'EXE.
 
Explicite:
 
tu charges la DLL avec LoadLibrary et GetProcAddress....

n°170401
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 12:23:26  profilanswer
 

bjone a écrit a écrit :

je dirais:
 
Implicite:
 
Tu rajoutes le petit .LIB généré à la compilation de la DLL, dans le projet de l'EXE.
 
Explicite:
 
tu charges la DLL avec LoadLibrary et GetProcAddress....




 
Ben c'est implicite : j'ai le petit .lib (j'ai même le projet VC qui a servi a creer la DLL) et lui je l'ai mis.
 
Par contre la fonction que je veux utiliser dans la dll n'est pas déclarée comme externe je crois.
 => char* fonction(char*)
 
Je dois la declarer avec un [/b]declspec[b] quelque part ?
 
Pour l'utiliser, je déclare simplement la fonction dans mon programme comme si elle venait d'un '.h' ?


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170404
smaragdus
whores, drugs & J.S. Bach
Posté le 03-07-2002 à 12:27:38  profilanswer
 

DarkOli a écrit a écrit :

 
 
Ben c'est implicite : j'ai le petit .lib (j'ai même le projet VC qui a servi a creer la DLL) et lui je l'ai mis.
 
Par contre la fonction que je veux utiliser dans la dll n'est pas déclarée comme externe je crois.
 => char* fonction(char*)
 
Je dois la declarer avec un [/b]declspec[b] quelque part ?
 
Pour l'utiliser, je déclare simplement la fonction dans mon programme comme si elle venait d'un '.h' ?




 
Dans ton projet de DLL, tu fais un .h qui contient tous les prototypes que tu veux exporter avec une macro qui vaut declspec(dllexport) pour la DLL et declspec(dllimport) dans l'EXE. Tu n'as plus qu'à ajouter le .h au projet de l'EXE

n°170469
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 13:50:25  profilanswer
 

Smaragdus a écrit a écrit :

 
 
Dans ton projet de DLL, tu fais un .h qui contient tous les prototypes que tu veux exporter avec une macro qui vaut declspec(dllexport) pour la DLL et declspec(dllimport) dans l'EXE. Tu n'as plus qu'à ajouter le .h au projet de l'EXE




 
une macro ? (comme dans excel ?)
 
C'est le truc avec un #define ?
 
Jai trouvé ça :

Code :
  1. #ifdef STATIC_LIBRARY
  2. #define DECLSPEC
  3. #else
  4. #define DECLSPEC __declspec(dllexport)
  5. #endif


 
Mais j'en fais quoi du declspec arpès ?


Message édité par darkoli le 03-07-2002 à 13:57:01

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170480
LetoII
Le dormeur doit se réveiller
Posté le 03-07-2002 à 14:02:09  profilanswer
 

tu met juste  

Code :
  1. void dllspec(dllexport)mafonction();


---------------
Le Tyran
mood
Publicité
Posté le 03-07-2002 à 14:02:09  profilanswer
 

n°170487
godbout
Génial.
Posté le 03-07-2002 à 14:08:13  profilanswer
 

Soit un lib + .h, loadtime (si je dis pas de connerie)
Soit juste un GetProcAddress + LoadLibrary (runtime)
 


---------------
Super.
n°170488
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 14:08:24  profilanswer
 

Donc dans le .h : "la_dll_a_darkoli.h"
 
je dois mettre :

Code :
  1. #ifndef _DLL_A_DARKOLI_H
  2. #define _DLL_A_DARKOLI_H
  3. #ifdef EXPNETFUNCS
  4. #define EXPNETTYPE __declspec( dllexport )
  5. #else
  6. #define EXPNETTYPE __declspec( dllimport )
  7. #endif EXPNETFUNCS
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. EXPNETTYPE char* fonction_a_darkoli(char*);
  12. #ifdef __cplusplus
  13. }
  14. #endif
  15. #endif


 
Sachant que "la_dll_a_darkoli.c" contient :

Code :
  1. #include "la_dll_a_darkoli.h"
  2. #include <...deux_trois_lib_standards...>
  3. char* fonction_a_darkoli(char* chaine)
  4. {
  5. [...Bordel a DarkOli qui fonctionne tres bien ...]
  6. }


 
Et le "programme_a_darkoli.c" doit contenir :

Code :
  1. #include <...>
  2. char* fonction_a_darkoli(char*);
  3. void main(void)
  4. {
  5. char* test=fonction_a_darkoli("toto" );
  6. fprintf(stdout, %s.\n", test==NULL?"NULL":test);
  7. return;
  8. }


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170493
godbout
Génial.
Posté le 03-07-2002 à 14:17:11  profilanswer
 

Un exemple si ca peut t'aider ;)
 
dans le .h
 

Code :
  1. #ifdef TESTDLL_EXPORTS
  2. #define TESTDLL_API __declspec(dllexport)
  3. #else
  4. #define TESTDLL_API __declspec(dllimport)
  5. #endif
  6. TESTDLL_API BOOL  Message();


 
Dans le .cpp
 

Code :
  1. WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  2. {
  3.         Message();
  4.         return 0;
  5. }


 


---------------
Super.
n°170505
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 14:26:31  profilanswer
 

letoII a écrit a écrit :

tu met juste  

Code :
  1. void dllspec(dllexport)mafonction();






 
Désolé mais y'a un problème à la compilation avec VC !!!
 
Il indique un problème avec le l'identifiant "mafonction" !!!


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170506
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 14:28:00  profilanswer
 

Godbout a écrit a écrit :

Un exemple si ca peut t'aider ;)
 
dans le .h
 

Code :
  1. #ifdef TESTDLL_EXPORTS
  2. #define TESTDLL_API __declspec(dllexport)
  3. #else
  4. #define TESTDLL_API __declspec(dllimport)
  5. #endif
  6. TESTDLL_API BOOL  Message();


 
Dans le .cpp
 

Code :
  1. WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  2. {
  3.         Message();
  4.         return 0;
  5. }


 
 




 
Pourquoi un dllexport et un dllimport ?


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170514
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 14:34:35  profilanswer
 

Y'a plus qu'une erreur.
 
char* __declspec(dllexport)ma_fonction(char*);
 
C'est le prototype de la fonction dans le .h de la dll (qui ne contient que ça), et VC me donne une erreur de "type" sans plus de precisions.
 
Sans le __declspec(dllexport) ca compile bien mais si j'ai bien compris ma fonction n'est pas exportée ?


Message édité par darkoli le 03-07-2002 à 14:39:56

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170523
godbout
Génial.
Posté le 03-07-2002 à 14:43:23  profilanswer
 

Bon j'ai pas trop le temps.
Je sais pas si tu veux faire du loadtime (avec un lib) ou du runtime (getprocaddress + loadlibrary).
 
Donc j'ai fait un petit exemple pour le loadtime.
 
Tu peux d/l ca ici:
 
Y a l'exe http://site.voila.fr/godbout/Testexe.exe
Et la dll http://site.voila.fr/godbout/Testdll.exe


---------------
Super.
n°170527
godbout
Génial.
Posté le 03-07-2002 à 14:45:37  profilanswer
 

DarkOli a écrit a écrit :

 
 
Pourquoi un dllexport et un dllimport ?




 
Parce que c'est du loadlibrary, avec un lib, donc dans l'exe et dans la dll il faut que tu declares la fonction. Au lieu de refaire un .h, j'utilise le meme, il suffit juste de rentrer une preprocessor definition dans un des deux cas et pas dans l'autre.


---------------
Super.
n°170528
LetoII
Le dormeur doit se réveiller
Posté le 03-07-2002 à 14:45:49  profilanswer
 

dans ton code source tu met  

Code :
  1. char* __declspec(dllexport)ma_fonction(char*)
  2. {
  3.   //ton code
  4. }


dans ton .h (que tu n'inclue pas dans la DLL)
 
tu met

Code :
  1. char* __declspec(dllimport)ma_fonction(char*);


---------------
Le Tyran
n°170536
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 14:55:02  profilanswer
 

letoII a écrit a écrit :

dans ton code source tu met  

Code :
  1. char* __declspec(dllexport)ma_fonction(char*)
  2. {
  3.   //ton code
  4. }


dans ton .h (que tu n'inclue pas dans la DLL)
 
tu met

Code :
  1. char* __declspec(dllimport)ma_fonction(char*);






 
Dans le code source de la dll  

Code :
  1. void __declspec(dllexport)ma_fonction(char*)
  2. {
  3.   //ton code
  4. }


 
Ca ca marche, mais il ne veut pas le "char*" à la place du void !!!


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170555
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 15:10:29  profilanswer
 

Euh Donc pour la dll c'est bon, en faitil faut ecrire :
__declspec(dllexport) char* service1_1(char* demande);
 
Par contre dans le programme qui utilise je mets le prototype :
__declspec(dllimport) char* service1_1(char* demande);
 
Et la ça compile toujours.
 
Mais des que je veux utiliser la fonction :
resultat=service1_1("toto" );
 
Ca compile plus !!! (enfin ça link plus).

Code :
  1. Linking...
  2. mci_dll.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) char * __cdecl service1_1(char *)" (__imp_?service1_1@@YAPADPAD@Z)
  3. Debug/mci_dll.exe : fatal error LNK1120: 1 unresolved externals
  4. Error executing link.exe.


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170568
godbout
Génial.
Posté le 03-07-2002 à 15:21:06  profilanswer
 

Je t'ai file deux exemples a telecharger un peu plus haut. Regarde comment j'ai fait ca t'aidera surement.


---------------
Super.
n°170581
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 15:26:26  profilanswer
 

Godbout a écrit a écrit :

Je t'ai file deux exemples a telecharger un peu plus haut. Regarde comment j'ai fait ca t'aidera surement.




 
Merci beaucoup MR :love:
 
esperont que ça marche !!!


Message édité par darkoli le 03-07-2002 à 15:29:19

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170586
godbout
Génial.
Posté le 03-07-2002 à 15:33:07  profilanswer
 

Ben normallement oui :D
 
Par contre comme j'ai dit c'est du loadtime, donc tu link avec un lib, tu ballades ta dll avec ton prog, sans laquelle il ne peut pas marcher.
L'autre facon c'est du runtime, style plugin.


---------------
Super.
n°170598
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 15:43:10  profilanswer
 

Godbout a écrit a écrit :

Ben normallement oui :D
 
Par contre comme j'ai dit c'est du loadtime, donc tu link avec un lib, tu ballades ta dll avec ton prog, sans laquelle il ne peut pas marcher.
L'autre facon c'est du runtime, style plugin.




 
En fait le probleme doit venir des char* !!!
Comment faut-il faire pour les gerer ?


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170605
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 15:50:16  profilanswer
 

Godbout a écrit a écrit :

Ben normallement oui :D
 
Par contre comme j'ai dit c'est du loadtime, donc tu link avec un lib, tu ballades ta dll avec ton prog, sans laquelle il ne peut pas marcher.
L'autre facon c'est du runtime, style plugin.




 
Ben visiblement il ne veut rien savoir, c'est chiant. ton prog marche bien. mais pas le mien et c'est tout pareil, avec ou sans parametres il se vautre lors de l'edition de liens.


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170617
godbout
Génial.
Posté le 03-07-2002 à 15:56:58  profilanswer
 

arf alors la je sais pas trop comment faire :/


---------------
Super.
n°170628
godbout
Génial.
Posté le 03-07-2002 à 16:04:55  profilanswer
 

Peut etre une histoire d'allocation memoire, de pointeur perdu, etc...


---------------
Super.
n°170649
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 16:48:10  profilanswer
 

Godbout a écrit a écrit :

Peut etre une histoire d'allocation memoire, de pointeur perdu, etc...




 
Merci mr !!!!!!!!!
 
J'ai réussi à faire marcher cette merde de dll !!!
 
Et j'ai même réussi a en refaire une nouvelle qui reçoit une chaine l'affiche et en retourne une autre !!!
 
Je pense qu'il devait y avoir un problème de parametrage du projet ?!
 
En tout cas merci :): :love: :sol:


Message édité par darkoli le 03-07-2002 à 18:04:25

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170666
godbout
Génial.
Posté le 03-07-2002 à 17:07:35  profilanswer
 

De rien, j'en ai chie aussi pour m'y mettre :D


---------------
Super.
n°170717
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 18:05:24  profilanswer
 

Godbout a écrit a écrit :

De rien, j'en ai chie aussi pour m'y mettre :D




 
Enfin le plus dur est a venir :( (toutes les librairies que j'utilise sont sous unix alors je sens que je vais m'amuser pour tout importer sous windows !!!).


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170808
godbout
Génial.
Posté le 03-07-2002 à 23:44:33  profilanswer
 

ah :/ :D


---------------
Super.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [DLL + VC] comment on utilise une DLL qu'on a créé ?

 

Sujets relatifs
[DLL, C] Comment ça marche ce bordel à roulette ?DLL
[VC++] Classe dans une DLL : fonctions virtuelles et erreur LNK2001[SDL + thread + DLL] Est-il possible de faire un mélange des trois ?
avec quel soft peut-on lire les DLL de façon "textuelle"Gestion des exceptions dans des DLL
JAVASCRIPT cree une fct qui change une image en une autre ![vb6]comment crée un objet en dynamique ?
[ C++ ] Composant CLX et DLLProgrammation de DLL
Plus de sujets relatifs à : [DLL + VC] comment on utilise une DLL qu'on a créé ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR