-
Cr�er une DLL C++ ?
Bonjour,
J'utilise la derni�re version de Code Blocks pour cr�er une
DLL. Or, les options de cr�ation sont "DLL sample" et "C source ".
Le premier fichier source cr�� est "main.c".
Mais alors comment je fais pour programmer quelque chose en C++
dans cette DLL ?
Merci.
-
Tu ajoutes des fichiers source C++ dedans ?
PS: Une DLL qui exporte des classes C++ faites avec MinGW ne marchera qu'avec des programmes compil�s avec MinGW : Seule l'interface C (fonctions C ou fonctions C++ extern "C") est standardis�e sous Windows...
-
Hein ?
Alors �a veut dire que si je veux cr�er une DLL qui contient un objet afin de
faire tourner cette librairie avec ... disons un programme �crit en Borland C++
Builder... C'est impossible ????
-
Tu ne pourras pas utiliser la classe C++ avec BCB, sauf en utilisant des wrappers C ou un syst�me d'interfaces fa�on COM/OLE...
-
Je viens de lire ce topic et cela ne m'enchante pas. Sous cobe blocks avec mingw rien de plus simple pour cr�er une dll.
De plus j'utilise code::blocks avec gcc sous linux et la aussi super simple de cr�er un .so (lib dynamique).
Mais avec msvc2005, pff quel gal�re. Dois-je obligatoirement sp�cifier des __ddl_export et import afin d'avoir des points d'entr�e?
De plus msvc2005 va t il me d�corer mes fonctions? Car j'inclus des librairie statics (.lib), cela causera t il des soucie lors de l'ex�cution d'un programme utilisant ma librairie?
Merci
-
- J'aimerais bien savoir � quel point il est "rien de plus simple" de cr�er une DLL sous MinGW. Je rappelle qu'on est suppos� choisir quelles fonctions on exporte ou non...
- Sous MSVC, deux fa�ons d'exporter des fonctions dans un projet DLL:
- D�clarer certaines fonctions (ou classes) en __declspec(dllexport) pour dire "ces fonctions seront export�es". Les fonctions C seront alors export�es avec la d�coration "C" standard de Windows (voir Format of a C Decorated Name)
- Ou �crire un fichier .def qui indique quelles fonctions seront export�es, et permet �galement de ne PAS mettre certaines fonctions dans la biblioth�que statique d'importation (pour certaines fonctions dont le nom ne change jamais) ou de choisir compl�tement sous quel nom la fonction sera export�e (une fonction appel�e "foo" peut �tre export�e sous le nom "bar" si on veut).
- Pour le coup de dllexport, on utilise g�n�ralement un fichier d'en-t�te et quelque macros pour pouvoir r�utiliser le fichier en question. Visual est capable de g�n�rer automatiquement un tel fichier d'en-t�te, produisant un truc dans ce style: http://www.developpez.net/forums/sho...42&postcount=6
- Ainsi, pour faire une fonction export�e int foo(const char *), il suffit de la d�clarer ainsi:
EXTERN_C MADLL_API int foo(const char *);
Ce qui donne une fonction export�e par la DLL, et utilisable aussi bien en C qu'en C++. - D'ailleurs, toutes les fonctions sont d�clar�es ainsi sous Windows (sauf qu'en plus, elles ont la convention d'appel WINAPI (__stdcall) au lieu de __cdecl).
Note: Pour des fonctions C ou des fonctions C++ extern "C", il n'y a aucun probl�me de compatibilit�.
Pour des classes C++, le format de d�coration d�pend du compilateur. Donc, si l'on veut utiliser les classes directement, l'on se retrouve oblig� de lier au .lib et de garder le m�me compilo.
Par contre, on peut utiliser les classes indirectement, avec des "wrappers C" ou un syst�me d'interfaces comme celui de COM/OLE (ou tout syst�me perso).