標籤:des style blog http ar color os 使用 sp
如果想要在兩個進程之間進行傳輸資料,共用記憶體是其中一個方法。當然個人覺得,共用記憶體主要的還是用來節約記憶體。
首先使用下面的函數建立一個新的檔案對應核心對象
HANDLE CreateFileMapping(
HANDLE hFile, //物理檔案控制代碼
LPSECURITY_ATTRIBUTES lpAttributes, //安全設定
DWORD flProtect, //保護設定
DWORD dwMaximumSizeHigh, //高位檔案大小
DWORD dwMaximumSizeLow, //低位檔案大小
LPCTSTR lpName //共用記憶體名稱
);
然後用
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
DWORD dwNumberOfBytesToMap
);
將一個檔案對應物件映射到當前應用程式的地址空間。
之後就可以對MapViewOfFile()返回的值進行操作了。
值得注意的是:CreateFileMapping()建立的映射對象本來就存在的話,那麼該函數相當於執行了OpenFileMapping()
函數的功能。
建立並寫資料:
1 LPVOID lpShareMem = NULL; 2 // appの名前をチェック 3 if (lstrcmpi(szExeName, "SsView") == 0) 4 { 5 g_hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "PDFLibShare"); 6 if (g_hMapFile == NULL) 7 { 8 g_hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, MAX_PATH, "PDFLibShare"); 9 }10 if(g_hMapFile != NULL)11 {12 // 共有メモリに書き込み13 lpShareMem = MapViewOfFile(g_hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);14 if (lpShareMem != NULL)15 {16 //if (g_szDocAddress == NULL || g_szDocAddress[0] == ‘\0‘)17 {18 char szShareMem[MAX_PATH] = {0};19 memcpy(g_szDocAddress, (char*)m_pdCurrentDoc, strlen((char*)m_pdCurrentDoc));20 memcpy(szShareMem, m_szCurrentFilePath, strlen(m_szCurrentFilePath));21 vector<char*> *wrk_vectorShareMem = (vector<char*>*)lpShareMem;22 wrk_vectorShareMem->push_back(szShareMem);23 }24 }25 }26 }27 // メモリ解放28 if (lpShareMem != NULL)29 {30 UnmapViewOfFile(lpShareMem);31 lpShareMem = NULL;32 }View Code
開啟並check資料:
1 if (lstrcmpi(szExeName, "PfuSsOrg") == 0) 2 { 3 hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "PDFLibShare"); 4 if(hMapFile != NULL) 5 { 6 // 共有メモリのチェック 7 lpShareMem = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0); 8 char *szShareMem = (char*)lpShareMem; 9 if (lstrcmpi(szShareMem, m_szCurrentFilePath) == 0)10 {11 if (lpShareMem != NULL)12 {13 UnmapViewOfFile(lpShareMem);14 lpShareMem = NULL;15 }16 if (hMapFile != NULL)17 {18 CloseHandle(hMapFile);19 hMapFile = NULL;20 }21 return 13; // SsViewで開ける22 }23 }24 }View Code
共用記憶體入門