Bedeutung von "CC_DLL" in dieser Zeile "Klasse CC_DLL CCSize" in Cocos2d-x
-
29-10-2019 - |
Frage
Wie lautet die Spezifikation von CC_DLL in dieser Zeile " Klasse CC_DLL CCSize " in Cocos2d-x.
Jede Klasse in cocos2d-x Definiere so -> Klasse ..... Klassenname
Es schafft Verwirrung für mich.Bitte helfen Sie mir.
Danke,
Lösung
Es handelt sich wahrscheinlich um eine Präprozessordefinition, die das Modul anweist, die Klasse entweder zu exportieren oder zu importieren.
So etwas wie:
#ifdef BUILDING_COCOS
#define CC_DLL _declspec(dllexport)
#else
#define CC_DLL _declspec(dllimport)
#endif
Beim Verknüpfen mit der Bibliothek ist BUILDING_COCOS
nicht definiert, daher bedeutet CC_DLL
_declspec(dllimport)
, der dem Compiler mitteilt, dass die Klasse in eine Binärdatei exportiert wird.
Andere Tipps
Ich gehe davon aus, dass CC_DLL
ungefähr so definiert ist (unter Verwendung der MSVC-Intrinsics-Syntax):
#ifdef CC_IS_IMPLEMENTATION /* or CC_IS_DLL_COMPILATION or something like that */
#define CC_DLL __declspec(dllexport)
#else
#define CC_DLL __declspec(dllimport)
#endif
Hierfür wird eine einzelne Definition verwendet, die die Klasse entweder in eine DLL exportiert oder daraus importiert, je nachdem, ob die API von einem Benutzer oder von der Implementierung selbst verwendet wird.Die Implementierung (.cpp
-Datei) würde dann ungefähr so aussehen:
// .cpp file
#define CC_IS_IMPLEMENTATION
// CC_DLL is now defined to __declspec(dllexport)
#include "myapi_stuff.h"
// implement it...
Wenn ein Bibliotheks- / DLL-Benutzer diese API (Klasse) verwendet, wird sie als __declspec(dllimport)
definiert, um die Implementierung aus einer DLL zu importieren.