arghh sacré dll !! - Programmation
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....
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.
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)
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);
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???
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
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.
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
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...
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
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