Глобальные переменные в DLL
int a=0;
_declspec(dllexport) extern "C" void Calc()
{
a=2;
}
После вызова Calc() a=0. Что делать, почему значения глобальных переменных не слхраняются?
Скорее всего функция Calc() не стартует
Стартует. По крайней мере в дебаггере Builder'a.
А как Вы определили, что после вызова а=0? Не стоит забывать, что в каждом процессе своя копия вашей dll со своими глобальными переменными.
в dll объявляем переменную так:
extern "C" __declspec(dllexport) int ggggg = 321;
в приложении достаем ее так:
HINSTANCE Lib_DLL = LoadLibrary("dll.dll");
int *Lib_Target = (int*) GetProcAddress(Lib_DLL,"_ggggg");
printf("%d", *Lib_Target); // Печатает 321
еще как вариент изменить Calc таким образом:
_declspec(dllexport) extern "C" int Calc()
{
a=2;
return a;
}