Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[DEV C++]DLL EN C++ POUR UN PROGRAMME EN C++


Information sur la source

Catégorie :Système Niveau : Débutant Date de création : 31/03/2003 Date de mise à jour : 31/03/2003 19:06:22 Vu / téléchargé: 14 116 / 1 241

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Simple exemple d'utilisation d'une DLL faite en C++ dans un programme en C++ avec DevC++ (ma version est la 4.9.7.0 avec gcc 3.2)


 

Source

  • Le projet de la DLL et un projet vide auquel j'ai change le type (Option du projet->Type->win32 DLL)
  • Le projet qui utilise le dll est n'importe quel type de projet, il suffit de déclaré le fonction (voir usedll.cpp) et de pense a mettre le lib???.a dans les librairie du projet (voir usedll.cpp)
  • **** project de la DLL ****
  • type: win32 dll
  • ** dll.cpp**
  • //j'ai crée un project vide, puis option du projet->type->win32 dll
  • #include <windows.h> //pour MessageBox
  • int __declspec (dllexport) msgbox3(char *buffer) //une fonction exporter
  • {
  • MessageBox(NULL,buffer,"DLL!!!",0);
  • return 0;
  • }
  • **** project qui utilise la dll ****
  • type : win32 console (pour être autre chose)
  • lib : libdll.a
  • ** usedll.cpp **
  • //il faut ajouter lib???.a où ??? c'est le nom du projet de la dll
  • // c'est dans Project Option->Optional Lib (tout en bas)
  • //chez moi c'est libdll.a
  • int __declspec (dllimport) msgbox3(char *buffer); //je déclare ma fonction
  • int main()
  • {
  • msgbox3("Utilise une DLL!");
  • return 0;
  • }
Le projet de la DLL et un projet vide auquel j'ai change le type (Option du projet->Type->win32 DLL)

Le projet qui utilise le dll est n'importe quel type de projet, il suffit de déclaré le fonction (voir usedll.cpp) et de pense a mettre le lib???.a dans les librairie du projet (voir usedll.cpp)

**** project de la DLL ****
type: win32 dll

** dll.cpp**

//j'ai crée un project vide, puis option du projet->type->win32 dll
#include <windows.h> //pour MessageBox

int __declspec (dllexport) msgbox3(char *buffer) //une fonction exporter
{
	MessageBox(NULL,buffer,"DLL!!!",0);
	return 0;
}

**** project qui utilise la dll ****
type : win32 console (pour être autre chose)
lib : libdll.a

** usedll.cpp **

//il faut ajouter lib???.a où ??? c'est le nom du projet de la dll
// c'est dans Project Option->Optional Lib (tout en bas)
//chez moi c'est libdll.a

int __declspec (dllimport) msgbox3(char *buffer); //je déclare ma fonction

int main()
{
    msgbox3("Utilise une DLL!");
    return 0;
}

Conclusion

Voila. Un problème : laissez un message

Le principale problème est que le nom d'une fonction exporté (pas exemple msgbox3) est exporté sous __Z8_msgbox3P4@4 ce qui pose des problème pour utilisé cette DLL avec autre chose qu'un programme fait en C++ avec DevC++. (si qqun sait comment resoudre ce problème merci de me le faire savoir)

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • app.devTélécharger ce fichier [Réservé aux membres club]775 octets
  • app.exeTélécharger ce fichier [Réservé aux membres club]97 693 octets
  • app.layoutTélécharger ce fichier [Réservé aux membres club]109 octets
  • dll.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier398 octets
  • dll.devTélécharger ce fichier [Réservé aux membres club]765 octets
  • dll.dllTélécharger ce fichier [Réservé aux membres club]93 263 octets
  • dll.layoutTélécharger ce fichier [Réservé aux membres club]107 octets
  • libdll.aTélécharger ce fichier [Réservé aux membres club]2 194 octets
  • libdll.defTélécharger ce fichier [Réservé aux membres club]292 octets
  • main.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier522 octets
  • main.oTélécharger ce fichier [Réservé aux membres club]818 octets
  • main2.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 714 octets
  • main2.oTélécharger ce fichier [Réservé aux membres club]1 706 octets
  • Makefile.winTélécharger ce fichier [Réservé aux membres club]625 octets
  • readme.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier822 octets
  • usedll.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier457 octets
  • usedll.devTélécharger ce fichier [Réservé aux membres club]785 octets
  • usedll.exeTélécharger ce fichier [Réservé aux membres club]92 614 octets

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de BruNews le 31/03/2003 19:50:32 administrateur CS

pour eviter decoration des noms tu peux mettre le nom de tes fonctions exportees dans un .def
2eme solution, extrait du Richter, moi je me sers du .def
#define MYLIBAPI  extern "c" __declspec(dllexport)
int MYLIBAPI  msgbox3(char *buffer);
ciao...

signaler à un administrateur
Commentaire de Xs le 31/03/2003 20:13:04

alors la... je dis bien joué. C'est pas que le code est extremement original, mais il a le mérite d'etre clair et court.
Cependant =&gt; http://www.cppfrance.com/article.aspx?Val=871

De plus, le commentaire de BruNews est trés, mais alors trés, utile : éviter les décorations est l'une des grosses questions qui a été posée, et je crois non résolue, sur le site www.developpez.com . Et toi, tu y a répondu rapidement et clairement. Decidement, ce soir, je me coucherais moins betes. :)

signaler à un administrateur
Commentaire de bobidop le 31/03/2003 20:26:35

yep c bien cool de mettre tout ca mais moi je galere encore avec les pointeurs je ne comprend pas grand chose malheureusement...
jy reviendrais pe etre plus tard sur ce thread!
thx en tt K;-)

signaler à un administrateur
Commentaire de RaphAstronome le 01/04/2003 18:51:25

Bravo

signaler à un administrateur
Commentaire de camel le 02/04/2003 11:35:14

tranquille le code .. et la remarque de BruNews est très interessante. Mais moi je ne sais pas comment fonctionne les .def si qqn pouvais m'expliquer ? thx

signaler à un administrateur
Commentaire de BruNews le 02/04/2003 12:27:00 administrateur CS

exemple d'un .def

EXPORTS
  bnFunc1
  bnFunc2
Stop ici, seulement liste nom des fonctions a exporter, inclure le .def dans le projet et va tout bon.
ciao...

signaler à un administrateur
Commentaire de camel le 02/04/2003 13:39:22

merci bien :)

signaler à un administrateur
Commentaire de chichi3373 le 06/09/2003 15:45:33

Salut
  
   ben moi j'ai pas resolu mon probleme de decoration. J'utilise pas de .def parceque je sais pas comment dire a devc++ de l'utilisé (il ignore les param de linkage quand je suis en type DLL donc pas de '--def mon.def').
    Pour la solution extern "c" __declspec(dllexport), elle marche bien pour les variable (type int ou meme class) mais pas pour les fonction.
    Un detail, pour oriente la reponse, j'utilise la dll sous delphi, donc peu m'importe que le nom sois correcte ou pas dans le fichier lib???.a

Merci a vous.

signaler à un administrateur
Commentaire de chichi3373 le 06/09/2003 15:55:58

Re salut

j'utilise pas exactement la solution :

#define MYLIBAPI  extern "c" __declspec(dllexport)
int MYLIBAPI  msgbox3(char *buffer);

mais :

#define MYLIBAPI  extern "c" __declspec(dllexport)
MYLIBAPI int  msgbox3(char *buffer);

sinon ca plante a la compile !!! (parse error before extern)

Voila

signaler à un administrateur
Commentaire de Naze le 14/10/2003 02:18:08

Salut tout le monde,

Est-ce que c'est possible d'utiliser une DLL créer avec DevC++ dans un projet C# de VS.NET ?
merci

signaler à un administrateur
Commentaire de deck_bsd le 23/06/2006 16:07:57

pile poile ce que je cherchai :D

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.