Partager via


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

Dans le cas des données, l'utilisation de __declspec(dllimport) est pratique car elle permet de supprimer une couche d'adressage indirect. Lorsque vous importez des données à partir d'une DLL, vous devez encore passer par la table des adresses d'importation. Cela signifie qu'avant l'existence de __declspec(dllimport), il fallait penser à effectuer un niveau supplémentaire d'adressage indirect lors de l'accès aux données exportées à partir de la DLL :

// project.h
#ifdef _DLL   // If accessing the data from inside the DLL
   ULONG ulDataInDll;

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

Il fallait alors exporter les données dans le fichier .DEF :

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

et y accéder depuis l'extérieur 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'adressage indirect. Vous n'avez plus à vous préoccuper des étapes ci-dessus. Comme indiqué précédemment, n'utilisez pas la déclaration __declspec(dllimport) sur les données lors de la génération de la DLL. Les fonctions de la DLL n'utilisent pas la table des adresses d'importation pour accéder à l'objet de données ; le niveau supplémentaire d'adressage indirect sera donc supprimé.

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

__declspec(dllexport) ULONG ulDataInDLL;

Voir aussi

Concepts

Importation dans une application