arghh sacré dll !!

arghh sacré dll !! - Programmation

Marsh Posté le 10-12-2001 à 13:14:48    

je creer sous visual project new dll , simple project
dans le def.cpp
 
je met:
  extern "C" __declspec(dllexport) int fonction(int,int);
 
puis la declaration:
 
 int fonction(int iNombre1, int iNombre2)
 {
  return ( ( iNombre1 < iNombre2 )? iNombre1 : iNombre2);
 }
 
 
je creer un autre projet pour essayer d'appeler 'fonction'
 
dans le .cpp ou je veux avoir accés à ma fonction je mets:
  extern "C" __declspec(dllimport) int fonction(int,int);
 
je copie le .lib dans mon projet et le .dll dans le dossier debug de mon projet
 
 
A la compile j'obtiens une erreur de linkage:
 error LNK2001: unresolved external symbol __imp__Minimum
 
 
1-pourquoi???
 
2-par ailleurs je ne vois pas trés bien à quoi corresponde le .lib et le .dll(je m'attender   à n'avoir q'un simple .dll????)
 
 
Merci d'avance à celui qui sera apporter des réponses à mes questions

Reply

Marsh Posté le 10-12-2001 à 13:14:48   

Reply

Marsh Posté le 10-12-2001 à 13:19:14    

1/ truc qui me parait pas clair :
 
extern "C" __declspec(dllexport) int fonction(int,int);  
 
ca, ca m'a l'air OK quand tu compiles ta DLL, par contre pour le prog ce serait plutot ;
 
extern "C" __declspec(dllimport) int fonction(int,int);  
 
(donc regle ca a coup de #ifdef ....)
 
 
2/le .lib te sert a ne pas avoir a faire les LoadLibrary, GetProcAdress et tout ca....

Reply

Marsh Posté le 10-12-2001 à 13:32:38    

oui mais le .lib il est compilé dans le exe, non ?
alors que la dll elle peut etre appelé par le exe à son démarrage ou au moment où on en a besoin.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-12-2001 à 13:34:16    

je vois pas trés bien en quoi ça pourrait me servir de mettre des #ifdef tu peux préciser STP??? j'ai essayer mais sans reussite .
 
par ailleur tu me confirme que l'appel de ma fonction est bien correct j'ai pas de truc à mettre devant pour pouvoir m'en servir????  
genre:__dll..truc nb=fonction(5,4)

Reply

Marsh Posté le 10-12-2001 à 13:40:42    

#ifdef BLABLA
#define BLABLA __declspec(dllexport)  
#else
#define BLABLA __declspec(dllimport)  
#endif
 
dans ta dll tu definis BLABLA
dans ton exe nan
Comme ca le pb des dllexport et dllimport ne se pose plus.
Devant les fonctions a exporter/importer tu fais juste un  
extern "C" BLABLA int fonction(int,int);

Reply

Marsh Posté le 10-12-2001 à 13:47:16    

antp a écrit a écrit :

oui mais le .lib il est compilé dans le exe, non ?
alors que la dll elle peut etre appelé par le exe à son démarrage ou au moment où on en a besoin.  




 
ça voudrais dire que l'on a pas besoin des deux en même temp???

Reply

Marsh Posté le 10-12-2001 à 13:49:20    

weblook$ a écrit a écrit :

 
 
ça voudrais dire que l'on a pas besoin des deux en même temp???  




 
si si, la lib comme g dit te fais juste un petit bout du boulot a ta place, mais ne remplace pas ta DLL

Reply

Marsh Posté le 10-12-2001 à 13:51:59    

Le .lib sert uniquement dans l'exe qui va utiliser la dll.
Il y a 2 façons pour un EXE de charger une dll :
 soit on laisse windows le faire tout seul et il faut mettre le .lib dans le projet de l'executable.
 soit on le fait par programmation ( Loadlibrary ...) et on a pas besoin du .lib.

Reply

Marsh Posté le 10-12-2001 à 13:55:13    

il ne faut pas oublier d'inclure le *.h ou sont definies les fonctions dans le cas ou on utilise un lib

Reply

Marsh Posté le 10-12-2001 à 14:11:02    

j'ai plus le temp je retest ça ce soir.
Merci à tous :jap:

Reply

Marsh Posté le 10-12-2001 à 14:11:02   

Reply

Marsh Posté le 10-12-2001 à 15:10:20    

ta les propriete du projet tu a indique le nom du lib?
suffit pas de le mettre dans le repertoire...


---------------
What butter and whiskey won't cure, there is no cure for.
Reply

Marsh Posté le 10-12-2001 à 15:26:29    

deathsharp a écrit a écrit :

ta les propriete du projet tu a indique le nom du lib?
suffit pas de le mettre dans le repertoire...  




 
bien vu ,c'était bien ça.merci beaucoup

Reply

Sujets relatifs:

Leave a Replay

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