Importation dans une application à l'aide de __declspec(dllimport)
Mise à jour : novembre 2007
Un programme qui utilise des symboles publics définis par une DLL est réputé les importer. Lorsque vous créez des fichiers d'en-tête pour des applications qui utilisent vos DLL pour la génération, utilisez __declspec(dllimport) sur les déclarations des symboles publics. Le mot clé __declspec(dllimport) fonctionne que vous effectuiez l'exportation avec des fichiers .def ou avec le mot clé __declspec(dllexport).
Pour rendre le code plus lisible, définissez une macro pour __declspec(dllimport) puis utilisez cette macro pour déclarer chaque symbole importé :
#define DllImport __declspec( dllimport )
DllImport int j;
DllImport void func();
L'utilisation de __declspec(dllimport) est facultative dans les déclarations de fonctions, mais le compilateur produit un code plus performant quand vous utilisez ce mot clé. Cependant, vous devez utiliser __declspec(dllimport) afin de permettre à l'exécutable importateur d'accéder aux objets et aux symboles de données publics de la DLL. Notez que les utilisateurs de votre DLL doivent quand même établir une liaison avec une bibliothèque d'importation.
Vous pouvez utiliser le même fichier d'en-tête à la fois pour la DLL et l'application cliente. Pour ce faire, utilisez un symbole de préprocesseur spécial qui indique si vous générez la DLL ou l'application cliente. Par exemple :
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
class CLASS_DECLSPEC CExampleA : public CObject
{ ... class definition ... };