[C/C++] dll...

dll... [C/C++] - Programmation

Marsh Posté le 03-12-2001 à 11:13:00    

Je sens que je vais me faire engueuler moi :D
 
Le topic sur les dll a disparu, et je voudrais m'assurer d'avoir bien compris tout ca, parce que j'ai des petits pb (segment error) en ce moment, et ca a l'air de venir de l'exportation des fonctions.
Voila ce que j'ai compris, si y a une erreur que quelqu'un m'arrete ;)
 
1) Pour exporter des fonctions, on a deux possibilites:
 
Soit un .DEF, ou l'on met le nom des fonctions a exporter, soit on define un DEFNIMP __declspec(dllexport), et devant chaque fonction a exporter on met DEFNIMP.
 
2) Pour utiliser la dll, soit un utilise le lib et les .h que l'on met dans le projet (run time), soit on fait un LoadLibrary et un GetProcAddress (load time (plug in)).
 
Voila si j'ai oublie des trucs ben c'est que je les sais pas.
J'crois que ca doit etre pas trop mal mais y a encore quelques trucs que je comprends pas bien, genre le .DEF (j'arrive pas avec les ordinaux @..)...

Reply

Marsh Posté le 03-12-2001 à 11:13:00   

Reply

Marsh Posté le 03-12-2001 à 11:16:20    

a mon avis il apas disparu, juste qu'il est plus vieux que la date de limite de recherche :D
 
 
Sinon oui ca a l'air OK to souc . si y trouve po la fonction y va te rendre un ptr NULL donc regarde si c'est ca . (sinon bah c ailleurs ;) )

Reply

Marsh Posté le 03-12-2001 à 11:18:00    

j'ai pas acces a l'exe pour la dll que je fais, donc pour le pointeur c'est : dmc :

Reply

Marsh Posté le 03-12-2001 à 11:18:49    

ok pour la recherche, je croyais qu'au bout de 15 jours ca degageait, je vais relire le topic

Reply

Marsh Posté le 03-12-2001 à 11:20:34    

Apparemment ca viendrait du fait que je fais en meme temps un  __declspec(dllexport) et un .DEF, pourtant dans le msdn ils disent qu'on peut faire les deux a la fois :??:

Reply

Marsh Posté le 03-12-2001 à 11:20:48    

bah t'as l'exe (au moins pour tester) non ?
ben tu compile ta DLL en debug et lance le debuggeur ...tu verra comme ca si tu entre dans ta fonction..

Reply

Marsh Posté le 03-12-2001 à 11:22:15    

fais gaffe paske ton .h il est partage
 
donc :
 
__declspec(dllexport) pour le .h quand tu compile ta DLL
 
et
 
__declspec(dllimport) pour le .h quand tu compile l'exe

Reply

Marsh Posté le 03-12-2001 à 11:22:25    

ouais je rentrais dans la fonction, c'est apres le return que ca chiait mais l'explication est juste au dessus ;)

Reply

Marsh Posté le 03-12-2001 à 11:22:44    

Juste une note-> les fonction qui sont exportee par la Dll doivent etre importe par ceux qui utilisent la Dll, et la ...
 
soit tu utilises __declspec(dllimport), d'on l'interet d'un define suivant que le .h est lu dans la Dll ou dans l'utilisateur....
 
soit tu fait un GetProcAdress... mais la un Pb peut se poser, en effet le "vrai nom" d'un fonction C++ inclus des decoration (pour indiquer la liste des types des arguments) et donc une fonction qui n'est pas definie avec extern 'C" peut etre dure a trouver...

Reply

Marsh Posté le 03-12-2001 à 11:23:33    

chrisbk a écrit a écrit :

fais gaffe paske ton .h il est partage
 
donc :
 
__declspec(dllexport) pour le .h quand tu compile ta DLL
 
et
 
__declspec(dllimport) pour le .h quand tu compile l'exe  




 
j'avais raccourci mais effectivement j'ai mis ca:
 
#ifdef MOBALPA_EXPORTS
#define MOBALPA_API __stdcall // = WINAPI
#else
#define MOBALPA_API __stdcall
#endif
 
 
Mais partage comment ca ?
il est inclus aussi dans l'exe ?, ou alors il l'utilise lors de l'appel ?

Reply

Marsh Posté le 03-12-2001 à 11:23:33   

Reply

Marsh Posté le 03-12-2001 à 11:25:27    

Y departage a la compilation
 
dans ton projet DLL fo que tu inclue MOBALPA_EXPORTS dans les symbols definie  
 
project - settings - C/C++ - preprocessor - preprocessor definition

Reply

Marsh Posté le 03-12-2001 à 11:27:05    

BENB -> Tout ce que je sais c'est que dans l'exe ils utilisent un LoadLibrary et un GetProcAddress, on m'a juste file les fonctions qui sont appelees, et moi je retravaille dessus.
Mais bon sur ca y a pas de prob, c'est plutot entre .DEF/__desc...
que ca coince un peu.
Mais j'ai change les __declspec(dllexport) / (dllimport) en __stdcall et c'est bon, y a plus de pb.
Pour les fonctions elles sont en extern "C"

Reply

Marsh Posté le 03-12-2001 à 11:27:32    

chrisbk a écrit a écrit :

Y departage a la compilation
 
dans ton projet DLL fo que tu inclue MOBALPA_EXPORTS dans les symbols definie  
 
project - settings - C/C++ - preprocessor - preprocessor definition  




 
C'est fait, t'inquiete ;)
Pas de pb de ce cote la.

Reply

Marsh Posté le 03-12-2001 à 11:50:01    

j'crois que j'me suis troue au niveau du run time qui est plutot avec le LoadLibrary et Load time avec un fichie lib...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed