В C ++ extern означает, что эта переменная объявлена в другом * .cpp (единица перевода).
Пример:
myfile1.cpp:
int globalVariable = 0;
myfile2.cpp:
extern int globalVariable; //same variable, because of extern
Если вам нужно экспортировать из dll, вы должны использовать dllexport (в библиотеке) и dllimport (в потребителе библиотеки) для функций и переменных, например:
mylibrary.cpp:
__declspec(dllexport) int myGlobalExportingVariable = 0;
myprogram.cpp:
__declspec(dllimport) int myGlobalExportingVariable;
Конечно, в реальном мире вы, вероятно, использовали бы что-то вроде этого:
mylibrary.hpp:
#ifdef MYLIBRARY
#define MYLIBRARY_ITEM __declspec(dllexport)
#else
#define MYLIBRARY_ITEM __declspec(dllimport)
#endif
MYLIBRARY_ITEM void func1();
MYLIBRARY_ITEM int variable0;
MYLIBRARY_ITEM float func2();
//...
И вы # включаете этот заголовок в mylibrary.cpp и myprogram.cpp; не забудьте определить макрос MYLIBRARY в настройках вашего проекта (C ++ -> Preprocessor -> Preprocessor определений).
Кстати: как указано в комментарии PiotrLegnica, регистрация вашей библиотеки dll с помощью regsvr32.exe не имеет смысла, если вы не используете технологию COM (объектная модель компонентов).