2009-02-17 5 views
7

Probablement une question simple mais je n'ai que Linux pour tester ce code là où __declspec (dllexport) n'est pas nécessaire. Dans le code actuel __declspec (dllexport) est en face de tous les fichiers dans le fichier .h, mais juste en face de 50% des fonctions du fichier cpp, je me demande si elles sont vraiment nécessaires dans le fichier cpp du tout?Est-ce que __declspec (dllexport) est nécessaire dans les fichiers cpp?

Répondre

11

Non, c'est seulement nécessaire dans l'en-tête. Il s'agit d'un link avec plus d'informations.

L'expansion de ce que Vinay a dit, je l'ai souvent vu une macro définie

#if defined(MODULENAME_IMPORT) 
#define EXPORTED __declspec(dllimport) 
#elif defined(MODULENAME_EXPORT) 
#define EXPORTED __declspec(dllexport) 
#endif 

Ensuite, dans votre tête vous

définir les définit en conséquence les paramètres du projet pour le projet faire l'importation/exportation.

5

Non, ce n'est pas obligatoire dans le fichier cpp. Seulement en déclaration, c'est obligatoire.

Par exemple si j'ai une classe CMyClass. Si je veux exporter ce alors .h aura

.h Code Serveur

__declspec (dllexport) CMyClass { };

Dans le code client à savoir, qui utilise cette classe, vous devez transmettre déclarer la classe comme

code client

__declspec (dllimport) CMyClass;

code // utiliser la classe

2

Vous pouvez utiliser dans le fichier .cpp également lorsque vous avez le code et vous templated instanciation dans le fichier .cpp alors vous devez exporter la définition lorsqu'il est instancié. Mais même dans ce cas, j'ai vu que faire en .h fonctionne aussi. Sur Windows, vous pouvez utiliser dumpbin.exe/exports * .dll pour voir quelles sont les signatures exportées, il y a aussi un utilitaire similaire sous Linux. Cela vous donnera une idée de la façon dont la signature est exportée.

Questions connexes