Глобальная переменная для dll

231
28 сентября 2017, 15:08

Как объявить глобальную переменную в основной программе чтобы затем,в dll получить к ней доступ?

Answer 1

Оптимальный способ доступа к переменной, находящейся в основной программе, из DLL это сделать в библиотеке функцию, которая будет принимать адрес и дальше работать с переменной через этот адрес. Пример:

__declspec(dllexport) void useData(T* data) {
   // используем data-> ...
}

В программе же вызывать эту функцию, передавая адрес глобальной переменной:

T gData;
useData(&gData);
Answer 2

В итоге, как сделал: в главной функции exe объявил функцию из dll следующим образом:

__declspec(dllexport) void _stdcall setHwnd(HWND*, HHOOK*);

Затем, в dll завёл две static - переменные, которые буду хранить нужные мне значения. И далее, вызвал эту функцию в главной программе:

setHwnd(&hwnd_main, &hCBTHook);

В dll функция выглядит так:

__declspec(dllexport) void _stdcall setHwnd(HWND* hwnd, HHOOK* hhook)
{
    hwnd_main = *hwnd;
    hCBTHook = *hhook;
}

И всё работает. Спасибо.

READ ALSO
как узнать длину массива [требует правки]

как узнать длину массива [требует правки]

Как узнать длину массива, который объявлен в другой функцииВнутри функции все работает, но нет доступа из другой функции

327
Доступ к элементам класса наследника из класса родителя

Доступ к элементам класса наследника из класса родителя

Каким образом можно работать с классом С в классе В?

281
Как скомпилировать OpenGL(freeglut) с MinGW на С++

Как скомпилировать OpenGL(freeglut) с MinGW на С++

Проекты на С собираю вот так:

270