2011-06-21 57 views
1

糾正我,如果我錯了。 問題與Windows控制檯應用程序上的C++有關。DLL內存映射或可執行文件中的地址空間分配

我創建了兩個應用程序,abc.exedef.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.exedef.exe),但DLL的位置是相同的,即c:\Funky.dll。 我在while循環中的兩個應用程序中調用顯示功能,例如,爲abc.exe

while(1) 
{ 
Display("ABC",10); 
} 

def.exe

while(1) 
{ 
Display("DEF",10); 
} 

現在顯示功能打印爲不同的應用的不同的值。但變量的地址總是相同的。

有人可以解釋它或提供與可執行文件中的DLL地址空間相關的鏈接。

非常感謝。

回答

1

每個進程。爲了在進程間共享數據,您必須手動應用多種方法之一 - 通常使用的方法是在DLL中或通過內存映射文件API製作共享部分。

仔細閱讀MSDN上的所有DLL相關資料(starting point)甚至更好 - 獲取Richter的「Windows應用程序編程」副本

相關問題