Значение "CC_DLL" в этой строке "class CC_DLL CCSize" в Cocos2d-x - PullRequest
1 голос
/ 07 декабря 2011

Что такое спецификация CC_DLL в этой строке " class CC_DLL CCSize " в Cocos2d-x.
Каждый класс в cocos2d-x Определить так -> class..... classname
Это создает путаницу для меня.Пожалуйста, помогите мне.

Спасибо,

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Вероятно, это определение препроцессора, указывающее модулю экспортировать или импортировать класс.

Что-то вроде:

#ifdef BUILDING_COCOS
#define CC_DLL _declspec(dllexport)
#else
#define CC_DLL _declspec(dllimport)
#endif

При связывании с библиотекой BUILDING_COCOS не определено, поэтому CC_DLL будет означать _declspec(dllimport), что говорит компилятору, что класс экспортируется в двоичном виде.

1 голос
/ 07 декабря 2011

Я предполагаю, что CC_DLL будет определено примерно так (используя синтаксис встроенных функций MSVC):

#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

Это сделано для того, чтобы иметь одно определение, которое экспортирует или импортирует класс в / из библиотекив зависимости от того, используется ли API пользователем или самой реализацией.Реализация (.cpp файл) будет выглядеть примерно так:

// .cpp file
#define CC_IS_IMPLEMENTATION
// CC_DLL is now defined to __declspec(dllexport)
#include "myapi_stuff.h"

// implement it...

И если пользователь библиотеки / dll использует этот API (класс), он определяется как __declspec(dllimport) для импорта реализации издлл.

...