糾正我,如果我錯了。 問題與Windows控制檯應用程序上的C++有關。DLL內存映射或可執行文件中的地址空間分配
我創建了兩個應用程序,abc.exe
和def.exe
,以及一個名爲Funky.dll
的DLL。我將該DLL保存在位置C:\Funky.dll
。
DLL中有一個全局字符串變量,例如「字符串值;」 而Dll公開的函數正在使用該變量。
下面是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
。 我在while循環中的兩個應用程序中調用顯示功能,例如,爲abc.exe
:
while(1)
{
Display("ABC",10);
}
和def.exe
:
while(1)
{
Display("DEF",10);
}
現在顯示功能打印爲不同的應用的不同的值。但變量的地址總是相同的。
有人可以解釋它或提供與可執行文件中的DLL地址空間相關的鏈接。
非常感謝。