Созданный проект в visual studio 2008. Теперь мы хотим разделить проект на множество файлов библиотек (DLL), но проблема в том, что у нас есть глобальные переменные, которые находятся в отдельном файле globals.h, используя этот файл, к которому мы обращаемся к глобальным переменным в проекте, используя ключевое слово extern которые объявляются externals.h.
Как поделиться этими данными глобальных переменных в разных библиотечных файлах???
globals.h externs.h
int a=0; extern int a;
int b=0; extern int b;
... ...
... ...
ПРИМЕЧАНИЕ. Globals.h включен только один раз в проект.
Обычный подход для глобальных переменных следующий:
globals.h
extern int a;
extern int b;
globals.c
int a = 1;
int b = 2;
Обратите внимание, что фактическое определение переменных находится в файле ac (или cpp).
Если вы экспортируете глобальные переменные из dll, необходимо выполнить дополнительные шаги.
globals.h
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
extern MYDLL_API int a;
extern MYDLL_API int b;
globals.c
#include "globals.h"
MYDLL_API int a = 1;
MYDLL_API int b = 2;
Вы должны определить MYDLL_EXPORTS при создании вашей DLL. Если вы используете его из других DLL или исполняемых файлов, он не должен быть определен.
__declspec(dllexport)
сообщает компоновщику: Этот символ (переменная, функция, класс) будет использоваться другими dll или приложениями.
__declspec(dllimport)
сообщает компилятору: этот символ не определен в этом проекте, а в другой dll.