Importation de données à l’aide de __declspec(dllimport)

Dans le cas des données, l’utilisation __declspec(dllimport) est un élément pratique qui supprime une couche d’indirection. Lorsque vous importez des données à partir d’une DLL, vous devez toujours passer par la table d’adresses d’importation. Avant __declspec(dllimport), cela signifie que vous deviez vous rappeler d’effectuer un niveau supplémentaire d’indirection lors de l’accès aux données exportées à partir de la DLL :

// project.h
// Define PROJECT_EXPORTS when building your DLL
#ifdef PROJECT_EXPORTS   // If accessing the data from inside the DLL
   ULONG ulDataInDll;

#else         // If accessing the data from outside the DLL
   ULONG *ulDataInDll;
#endif

Vous allez ensuite exporter les données dans votre . Fichier DEF :

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

et y accéder en dehors de la DLL :

if (*ulDataInDll == 0L)
{
   // Do stuff here
}

Lorsque vous marquez les données en tant que __declspec(dllimport), le compilateur génère automatiquement le code d’indirection pour vous. Vous n’avez plus à vous soucier des étapes ci-dessus. Comme indiqué précédemment, n’utilisez __declspec(dllimport) pas de déclaration sur les données lors de la génération de la DLL. Les fonctions au sein de la DLL n’utilisent pas la table d’adresses d’importation pour accéder à l’objet de données ; par conséquent, vous n’aurez pas le niveau supplémentaire d’indirection présent.

Pour exporter automatiquement les données à partir de la DLL, utilisez cette déclaration :

// project.h
// Define PROJECT_EXPORTS when building your DLL
#ifdef PROJECT_EXPORTS   // If accessing the data from inside the DLL
   __declspec(dllexport) ULONG ulDataInDLL;

#else         // If accessing the data from outside the DLL
   __declspec(dllimport) ULONG ulDataInDLL;
#endif

Voir aussi

Importation dans une application