Question sur les DLL de l'Exportation/l'Importation et à l'Externe sur Windows

Hey les gars, j'ai quelques questions rapides sur les dll de windows.

Fondamentalement, je suis en utilisant le ifdefs pour gérer la dllexport et dllimport, ma question est en fait concernant le placement de la dllexports et dllimports ainsi que le mot-clé extern.

Je suis en train de monter le dllimports/dllexports sur les fichiers d'en-tête, mais dois-je mettre le dllexport et dllimports sur le actuellement à la définition?

Ce sujet pour les typedefs?

Dois-je mettre la dllimport/dllexport en face? comme dans

dllexport typedef map<string, int> st_map

Également en ce qui concerne le mot-clé extern j'ai vu qu'il est utilisé comme ceci:

extern "C" {

dllexport void func1();

}

J'ai également vu qu'il est utilisé comme ceci:

extern dllexport func1();

L'on inclut le "C" et l'autre pas, ma question est quelle est la différence et dois-je l'utiliser? Si je ne dois-je utiliser à la fois pour dllexport et dllimport aussi dois-je utiliser à la fois sur le fichier d'en-tête les déclarations et les définitions?

Mon projet est d'aller à la bibliothèque partagée, il contient plusieurs fichiers de classe qui je veux exporter, certains typdefs je veux exporter et certaines fonctions globales qui je veux également d'exporter le tout dans une dll.

Quelqu'un m'éclairer s'il vous plaît?

EDIT:

Bon, je pense que je vais poster un petit extrait de ce que j'ai fait, également remarquer que je suis la construction de la bibliothèque pour linux et windows, je fais vérifier que:

mydll.h

#ifdef WINDOWS
#   ifdef PSTRUCT_EXPORT
#   define WINLIB __declspec(dllexport)
#   else
#   define WINLIB __declspec(dllimport)
#   endif
#else
#  define WINLIB
#endif

WINLIB void funct1();

Maintenant dans le code source:

mydll.cpp

#define PSTRUCT_EXPORT

void funct1() <---- do i need to add WINLIB in front of it? 
                      Or is doing it in the header enough?

OriginalL'auteur iQ. | 2009-09-17