共享資料區:
#pragma data_seg("YCIShared")
HWND g_hWndCaller = NULL;
HHOOK g_hHook = NULL;
#pragma data_seg()
記憶體映射檔案:
class CShareMemory
{
public:
// 建構式和解構式
CShareMemory(const char * pszMapName, int nFileSize = 0, BOOL bServer = FALSE);
~CShareMemory();
// 屬性
LPVOID GetBuffer() const { return m_pBuffer; }
// 實作
private:
HANDLE m_hFileMap;
LPVOID m_pBuffer;
};
inline CShareMemory::CShareMemory(const char * pszMapName,
int nFileSize, BOOL bServer) : m_hFileMap(NULL), m_pBuffer(NULL)
{
if(bServer)
{
// 創建一個記憶體映射檔案物件
m_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL, PAGE_READWRITE, 0, nFileSize, pszMapName);
}
else
{
// 打開一個記憶體映射檔案物件
m_hFileMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, pszMapName);
}
// 映射它到記憶體,取得共享記憶體的首地址
m_pBuffer = (LPBYTE)MapViewOfFile(
m_hFileMap,
FILE_MAP_ALL_ACCESS,
0,
0,
0
);
}
inline CShareMemory::~CShareMemory()
{
// 取消檔案的映射,關閉檔案映射物件句柄
UnmapViewOfFile(m_pBuffer);
CloseHandle(m_hFileMap);
}
----
請問大神們這2個有什么區別嗎
uj5u.com熱心網友回復:
#pragma data_seg 一般用在DLL 中定義共享資料段, 所有掛接了此DLL的行程可以訪問相同的資料段命名檔案映射 也可以做共享, 但是訪問的行程間可以沒有關聯
uj5u.com熱心網友回復:
這種細節問題都知道 厲害了前輩
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/210130.html
標籤:基礎類
下一篇:如何在分析崩潰的邊緣分析問題
