私が間違っている場合は、私を修正してください。 質問は、WindowsコンソールアプリケーションのC++に関連しています。実行可能ファイルのDLLメモリマッピングまたはアドレス空間割り当て
abc.exe
とdef.exe
という2つのアプリケーションと、Funky.dll
というDLLを作成しました。私はDLLを場所C:\Funky.dll
に保存しました。
DLLにグローバル文字列変数があります。 "文字列値;" そして、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;
}
は今は2つの異なるアプリケーション(すなわちabc.exe
とdef.exe
)から同じDLLにアクセスしていますが、DLLの位置は同じである、すなわち、c:\Funky.dll
。 whileループの両方のアプリケーションでDisplay関数を呼び出します。 abc.exe
用:
while(1)
{
Display("ABC",10);
}
とdef.exe
用:
while(1)
{
Display("DEF",10);
}
次に、異なるアプリケーションに対して異なる値を印刷表示機能。しかし、変数のアドレスは常に同じです。
実行可能ファイルにDLLのアドレス空間に関連するリンクを説明したり、提供したりできますか?
ありがとうございます。