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
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!