J'ai besoin dans une DLL d'utiliser une classe, définie dans un exécutable (DLL et exécutable sont compilés par le même compilateur). Mais je ne veux pas que le code source de cette définition de classe soit disponible pour la DLL, seule la déclaration.Exporter la classe de l'exécutable vers la DLL
Une façon possible de le faire est de rendre toutes les méthodes de classe nécessaires à virtual
(de sorte que l'éditeur de liens DLL n'ait pas besoin des définitions de ces méthodes). Les inconvénients de cette approche:
- Je ne peux pas créer des objets de classes exportées dans le code DLL à l'aide
new
(un devoir créer des fonctions supplémentaires dans le code de exécutable). - Je dois faire toutes ces méthodes
virtual
, même si autrement ils n'ont pas besoin de êtrevirtual
.
Il existe un moyen d'exporter une classe d'une DLL vers un exécutable en utilisant l'attribut étendu __declspec(dllexport)
de classe de stockage de Microsoft. Existe-t-il un moyen d'exporter une classe de l'exécutable vers la DLL en utilisant la même technique?
Mon ancien compilateur Borland C 6 ne me permet pas de créer une bibliothèque d'import lors de la construction d'un projet exécutable. (Ainsi, lors de la compilation de la DLL, l'éditeur de liens me donne des messages d'erreur externes non résolus pour toutes les méthodes de classe non virtuelles importées.) Est-ce une limitation de ce même compilateur?
Oui, vous avez raison. Juste essayé sur MS VS 2008 - il est possible de générer une bibliothèque d'importation pour un exécutable avec tous les symboles __declspec et de le lier avec dll. Donc, il semble que ce soit une limitation de mon ancien compilateur Borland C++ 6.0. Je vous remercie. –
Pour ajouter une note, si vous exportez les symboles en utilisant un fichier DEF de votre exe, votre exe ne pourra plus s'exécuter. –