• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            面對現實,超越自己
            逆水行舟,不進則退
            posts - 269,comments - 32,trackbacks - 0
            C++使用共享內存實現進程間通信
            文件映射是一種實現進程間單向或雙向通信的機制。它允許兩個或多個本地進程間相互通信。為了共享文件或內存,所有的進程必須使用相同的文件映射的名字或是句柄。
            為了實現共享文件,第一個進程先調用CreateFile方法。接下來調用CreateFileMapping方法來創建一個文件映射對象。并為文件映射指明一個句柄和名稱。由于事件,信號,互斥對象和文件映射等這些內核對象都共享同一個名字空間,所以如果這個名字和其他一個對象的名稱重名的話那么將創建失敗。
            為了實現共享內存,進程應首先調用CreateFileMapping函數然后在hFile參數中傳入INVALID_HANDLE_VALUE宏來替代句柄。相應的文件映射對象會從系統的分頁文件中獲得一段內存。如果hFile參數的值是INVALID_HANDLE_VALUE,那么你在調用CreateFileMapping時必須給共享內存指定一個大小值。
            使用共享內存或文件的進程必須使用MapViewOfFile函數或MapViewOfFileEx函數來創建一個文件視圖。
            示例代碼:
            服務端:
            HANDLE hfilemapping = NULL;
            void CCSharedMemoryDlg::OnButton1()
            {
                // TODO: Add your control notification handler code here
                hfilemapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 16, "COMBANC_SHARE");
                //創建錯誤
                if ((hfilemapping == NULL) || (hfilemapping == INVALID_HANDLE_VALUE))
                //    return lx_invalid_sharedmemory;
                    MessageBox("error");
                
                //共享內存已經存在
                if (GetLastError() == ERROR_ALREADY_EXISTS)
                {
                    MessageBox("共享內存已經存在");
                    return;
                }
                BYTE *psize = (BYTE *)MapViewOfFile(hfilemapping, FILE_MAP_WRITE, 0, 0, sizeof(BYTE));
                if(psize == NULL)
                {
                    if (hfilemapping != NULL)
                    {
                        CloseHandle(hfilemapping);
                        hfilemapping = NULL;
                    }
                    return;
                }

                CString sTest = "abc";
                char ch[16] = "COMBANC_TEST";
                memcpy(psize,sTest,sTest.GetLength());
                
                if (psize != NULL)
                {
                    UnmapViewOfFile(psize );
                    psize = NULL;
                }
            }

            客戶端:
            HANDLE hfilemapping = NULL;
            void CTestShareMemoryDlg::OnBnClickedButton1()
            {
                // TODO: Add your control notification handler code here
                 hfilemapping = OpenFileMapping(FILE_MAP_READ, FALSE, "COMBANC_SHARE");
                 if ((hfilemapping == NULL) || (hfilemapping == INVALID_HANDLE_VALUE))
                     MessageBox("error");
             
                BYTE *psize = (BYTE *)MapViewOfFile(hfilemapping, FILE_MAP_READ, 0, 0, sizeof(BYTE));
                if(psize == NULL)
                {
                    if (hfilemapping != NULL)
                    {
                        CloseHandle(hfilemapping);
                        hfilemapping = NULL;
                    }
                    return;    
                }

                char ch[16];
                memcpy(ch,psize,16);
                MessageBox(ch);

                if (psize  != NULL)
                {
                    UnmapViewOfFile(psize );
                    psize = NULL;
                }
                if (hfilemapping != NULL)
                {
                    CloseHandle(hfilemapping);
                    hfilemapping = NULL;
                }
            }
            posted on 2014-04-11 18:37 王海光 閱讀(619) 評論(0)  編輯 收藏 引用 所屬分類: C++
            99久久成人18免费网站| 合区精品久久久中文字幕一区 | 九九久久99综合一区二区| 久久99热只有频精品8| 51久久夜色精品国产| 色妞色综合久久夜夜| 久久国产热精品波多野结衣AV| 国产午夜精品理论片久久影视| 人妻丰满?V无码久久不卡| 久久久久人妻一区二区三区vr| 97精品伊人久久久大香线蕉| 久久久噜噜噜久久中文字幕色伊伊| 精品久久久久久久久午夜福利| 久久无码av三级| 日韩人妻无码精品久久免费一| 精品久久久久久国产牛牛app| 亚洲国产精品无码久久久蜜芽| 青青草原1769久久免费播放| 久久久久久A亚洲欧洲AV冫| 久久精品一本到99热免费| 久久人人添人人爽添人人片牛牛| 久久国产精品免费| 精品人妻伦九区久久AAA片69| 久久99精品国产麻豆宅宅| 999久久久免费国产精品播放| 久久精品久久久久观看99水蜜桃| 久久国产热这里只有精品| 久久久精品免费国产四虎| 99久久人妻无码精品系列蜜桃| 麻豆精品久久久久久久99蜜桃 | 久久电影网2021| 蜜臀av性久久久久蜜臀aⅴ| 午夜精品久久影院蜜桃| 99久久夜色精品国产网站| 久久亚洲高清观看| 青草影院天堂男人久久| 国产精品久久网| 狠狠色丁香婷婷综合久久来来去 | 国产免费福利体检区久久| 久久精品国产亚洲av水果派| 伊人久久大香线蕉AV色婷婷色|