Bei der Arbeit mit gemeinsam genutzten Bibliotheken unter Windows ist die Definition der entsprechenden Makros für Export- und Importfunktionen erforderlich. Der traditionelle Ansatz beinhaltet die Verwendung des Makros COMPILING_DLL.
Definieren von COMPILING_DLL
Das Makro COMPILING_DLL ist normalerweise nicht explizit definiert und basiert auf dem Standardverhalten von Visual Studio. Standardmäßig gilt es beim Erstellen eines DLL-Projekts als definiert und bei Verwendung der DLL in einer Clientanwendung als undefiniert. Dieser Ansatz kann jedoch zu Problemen bei der Verwendung von Load-Time Dynamic Linking (LTDL) führen, da Sie nicht für beide Szenarien denselben Header verwenden können.
Alternative Lösung
Eine Alternative zur Verwendung von COMPILING_DLL besteht darin, ein lokal im Projekt definiertes Standardmakro zu verwenden. Standardmäßig definiert Visual Studio Makros wie MYDLL_EXPORTS und MYDLL_IMPORTS für das aktuelle Projekt. Diese Makros können wie folgt verwendet werden:
#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
In diesem Beispiel, in dem der Projektname „MyDLL“ lautet, wäre das Makro MYDLL_EXPORTS beim Erstellen des DLL-Projekts definiert und bei externer Verwendung undefiniert. Durch die Nutzung dieser Standardmakros können Sie das DLLEXPORT-Makro für beide Szenarien entsprechend definieren, ohne sich auf die Existenz von COMPILING_DLL verlassen zu müssen.
Das obige ist der detaillierte Inhalt vonWie kann ich „dllexport'/„dllimport' in gemeinsam genutzten Bibliotheken effektiv verarbeiten, ohne auf „COMPILING_DLL' angewiesen zu sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!