Inclure une DLL avec le .lib

Résolu
cs_sandy27 Messages postés 20 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 6 août 2008 - 16 nov. 2005 à 12:03
cs_Gadour Messages postés 1 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 7 décembre 2005 - 7 déc. 2005 à 17:51
j'aimerais savoir comment utiliser une librairie DLL lorsqu'on a le
.lib. Je travaille en C sous Visual C++. Si quelqu'un avait un exemple
de création d'une DLL pour avoir le .lib et le .dll, ce serait génial !
On m'a juste dit: tu inclues le .lib dans ton projet. Ok mais après ??!!

14 réponses

cs_Gadour Messages postés 1 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 7 décembre 2005
7 déc. 2005 à 17:51
Pour inclure une DLL, tu dois :
- Ajouter le .LIB dans le porjet.
- Dans le fichier .h, tu ajoutes tous les fonctions et tu indiques qu'ils sont des fonctions externes:

extern "C" __declspec(dllexport) int myfunction();
ou bien: extern "C" __declspec(dllexport) int _stdcall myfunction();
ou bien: extern "C" __declspec(dllexport) int _cdecl myfunction();

Et ça marchera.
Abdelkader YEDES
3
ricky78 Messages postés 126 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 11 juillet 2006
16 nov. 2005 à 12:21
bonjour

Tu inclus le .lib dans les link du projet.
Si c'est une DLL proprietaire tu peux directement inclure le fichier .h avec un #include "nomet chemin du .h"
dans ton projet pour te servir de tes fonctions ou de tes classes.

Cordialement
TOCHE
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 nov. 2005 à 12:56
#include <windows.h>
#include "nomDllH.h"
#pragma comment(lib, "nomDllLib.lib")

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_sandy27 Messages postés 20 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 6 août 2008
16 nov. 2005 à 14:05
merci pour cette réponse ! donc, je rajoute .lib dans mes links, et
j'inclue le .h de la dll que je crée. j'imagine que je peux ensuite
utiliser les fonctions de ma librairie comme n'importe quelle autre
fonction (je suis vraiment débutante en C, et en librairies, n'en
parlons pas !!)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_sandy27 Messages postés 20 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 6 août 2008
16 nov. 2005 à 14:07
j'avais pas vu la deuxième réponse. Que fait au juste la 3ème ligne avec #pragma ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 nov. 2005 à 14:16
info pour le link des fonctions.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_sandy27 Messages postés 20 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 6 août 2008
16 nov. 2005 à 14:24
ok. Alors la suite: ça c'est la tête du header de ma Dll (en fait, j'ai repris un truc existant)



#ifndef __API_TESTDLL_H

#define __API_TESTDLL_H



#if defined (__cplusplus)

extern "C" {

#endif



typedef void (WINAPI *DLL_Function_ReadInputFile) (FILE *input_file);

typedef void (WINAPI *DLL_Function_WriteOutputFile) (FILE *output_file);



#if defined (__cplusplus)

}

#endif

#endif __API_TESTDLL_H




j'ai donc rajouté les commandes données par BruNews. Comment j'utilise
les fonctions de ma DLL dans mon programme ? si je met juste le nom de
ma fonction (ex, ReadInputFile) ça marche pas, si je met WINAPI devant,
ça marche pas non plus, bref, je connais pas la syntaxe...



si ça peut aider, dans le DllMain, mes fonctions sont écrites comme ça:



void WINAPI ReadInputFile(FILE *input_file)

{

}
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 nov. 2005 à 14:31
#ifndef __API_TESTDLL_H
#define __API_TESTDLL_H


#if defined (__cplusplus)
extern "C" {
#endif


void __stdcall DLL_Function_ReadInputFile(FILE *input_file);
void __stdcall DLL_Function_WriteOutputFile(FILE *output_file);


#if defined (__cplusplus)
}
#endif
#endif __API_TESTDLL_H

VERIFIE LE NOM DE TES FONCTIONS SI EST BON.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_sandy27 Messages postés 20 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 6 août 2008
16 nov. 2005 à 14:49
super ! mes questions doivent paraitre vraiment basiques mais
t'imagines pas comme tu me sauves la vie, pauvre ignare que je suis !!
alors je continue encore un coup:

j'ai l'impression qu'il suffit pas de faire:



ReadInputFile(FILE *input_file)




dans le programme utilisant la dll pour utiliser la fonction en
question.... pourquoi pas ? puisqu'on a inclut le .h qui contient les
déclarations ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 nov. 2005 à 15:02
Sinon compilo dira qu'il ne connait pas le proto.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_sandy27 Messages postés 20 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 6 août 2008
16 nov. 2005 à 15:05
euh.... j'ai pas compris la réponse...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 nov. 2005 à 15:13
le compilo a toujours besoin de connaitre le prototype d'une fonction pour accepter son emploi, doit savoir convention d'appel (stdcall ou cdecl ou...), nbr params, etc...

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_sandy27 Messages postés 20 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 6 août 2008
16 nov. 2005 à 15:36
ok, cette fois j'ai compris !



par contre, j'ai un autre problème. Sous Visuel C++, au moment de faire le linking de ma dll, j'ai le message suivant:



Creating library Debug/FLU_MEC_Simu.lib and object Debug/FLU_MEC_Simu.exp

FLU_MEC_Simu.exp : warning LNK4070: /OUT:FLU_MEC_DLL.dll directive in
.EXP differs from output filename "Debug/FLU_MEC_Simu.dll"; ignoring
directive



c'est un warning mais je me demande si ça pose pas problème quand même pour compiler le programme utilisant la DLL...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 nov. 2005 à 18:00
Remets en cohérence tous les noms, sur qu'1 seul va mieux.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
Rejoignez-nous