Maison > développement back-end > C++ > Comment puis-je gérer efficacement `dllexport`/`dllimport` dans les bibliothèques partagées sans compter sur `COMPILING_DLL` ?

Comment puis-je gérer efficacement `dllexport`/`dllimport` dans les bibliothèques partagées sans compter sur `COMPILING_DLL` ?

Linda Hamilton
Libérer: 2024-11-30 21:23:14
original
692 Les gens l'ont consulté

How Can I Effectively Handle `dllexport`/`dllimport` in Shared Libraries Without Relying on `COMPILING_DLL`?

Macro pour le commutateur dllexport/dllimport

Lorsque vous travaillez avec des bibliothèques partagées sous Windows, il devient nécessaire de définir les macros appropriées pour les fonctions d'exportation et d'importation. L'approche traditionnelle implique l'utilisation de la macro COMPILING_DLL.

Définition de COMPILING_DLL

La macro COMPILING_DLL n'est généralement pas explicitement définie et repose sur le comportement par défaut de Visual Studio. Par défaut, il est considéré comme défini lors de la création d'un projet DLL et non défini lors de l'utilisation de la DLL dans une application client. Cependant, cette approche peut entraîner des problèmes lors de l'utilisation de la liaison dynamique au moment du chargement (LTDL), où vous ne pouvez pas utiliser le même en-tête pour les deux scénarios.

Solution alternative

Une alternative à l'utilisation de COMPILING_DLL consiste à utiliser une macro par défaut définie localement dans le projet. Par défaut, Visual Studio définit des macros telles que MYDLL_EXPORTS et MYDLL_IMPORTS pour le projet en cours. Ces macros peuvent être utilisées comme suit :

#ifdef  MYDLL_EXPORTS 
    /*Enabled as "export" while compiling the dll project*/
    #define DLLEXPORT __declspec(dllexport)  
#else
    /*Enabled as "import" in the Client side for using already created dll file*/
    #define DLLEXPORT __declspec(dllimport)  
#endif
Copier après la connexion

Dans cet exemple, où le nom du projet est "MyDLL", la macro MYDLL_EXPORTS serait définie lors de la construction du projet DLL et non définie lors de son utilisation en externe. En tirant parti de ces macros par défaut, vous pouvez définir la macro DLLEXPORT de manière appropriée pour les deux scénarios sans compter sur l'existence de COMPILING_DLL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal