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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour