Поправь меня, если я ошибаюсь.Вопрос связан с C ++ в приложении Windows Console.
Я создал два приложения, abc.exe
и def.exe
, и библиотеку DLL с именем Funky.dll
.Я хранил библиотеку DLL по адресу C:\Funky.dll
.
. В библиотеке DLL есть глобальная строковая переменная, например "string Value;"И выставленная Dlls функция использует эту переменную.
Ниже приведен код DLL:
#include<header files etc>
string Value;
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
extern "C" __declspec(dllexport) string Display(string str, int val)
{
value=str;
cout<<"\n************I am in a FunkyDLL************\n";
cout<<"\n"<<value;
cout<<"\n"<<val;
printf("\nAddress Space %u::",&value);
return value;
}
Теперь я обращаюсь к одной и той же DLL из двух разных приложений (то есть abc.exe
и def.exe
) но расположение библиотеки DLL такое же, то есть c:\Funky.dll
.Я вызываю функцию Display в обоих приложениях в цикле while, например, для abc.exe
:
while(1)
{
Display("ABC",10);
}
и для def.exe
:
while(1)
{
Display("DEF",10);
}
Теперь функция отображения печатает разные значениядля различного применения.Но адрес переменной всегда один и тот же.
Может кто-нибудь объяснить это или предоставить ссылку, связанную с адресным пространством DLL в исполняемых файлах.
Заранее большое спасибо.