MMFShare

来源:互联网 发布:java局部变量初始化 编辑:程序博客网 时间:2024/06/03 07:42
#include <WindowsX.h>HANDLE s_hFileMap=NULL;// This macro evaluates to the number of elements in an array. #define chDIMOF(Array) (sizeof(Array) / sizeof(Array[0]))inline void chMB(PCSTR s) {   char szTMP[128];   GetModuleFileNameA(NULL, szTMP, chDIMOF(szTMP));   MessageBoxA(GetActiveWindow(), s, szTMP, MB_OK);}void CMyMMFShareDlg::OnCreatefile() {         // Create a paging file-backed MMF to contain the edit control text.         // The MMF is 4 KB at most and is named MMFSharedData.         s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,             PAGE_READWRITE, 0, 4 * 1024, TEXT("MMFSharedData"));         if (s_hFileMap != NULL) {            if (GetLastError() == ERROR_ALREADY_EXISTS) {               chMB("Mapping already exists - not created.");               CloseHandle(s_hFileMap);            } else {               // File mapping created successfully.               // Map a view of the file into the address space.               PVOID pView = MapViewOfFile(s_hFileMap,                  FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);               if (pView != NULL) {                  // Put edit text into the MMF.                  //Edit_GetText(GetDlgItem( IDC_DATA),                   //  (PTSTR) pView, 4 * 1024);   GetDlgItemText(IDC_DATA,(PTSTR) pView, 4 * 1024);                  // Protect the MMF storage by unmapping it.                  UnmapViewOfFile(pView);                  // The user can't create another file right now.                  //Button_Enable(hwndCtl, FALSE);  //Button_Enable(GetDlgItem(IDC_CREATEFILE), FALSE);  GetDlgItem(IDC_CREATEFILE)->EnableWindow(FALSE);                  // The user closed the file.                  //Button_Enable(GetDlgItem(hwnd, IDC_CLOSEFILE), TRUE);  GetDlgItem(IDC_CLOSEFILE)->EnableWindow(TRUE);               } else {                  chMB("Can't map view of file.");               }            }         } else {            chMB("Can't create file mapping.");         }}void CMyMMFShareDlg::OnClosefile() {         if (CloseHandle(s_hFileMap)) {            // User closed the file, fix up the buttons.            //Button_Enable(GetDlgItem(hwnd, IDC_CREATEFILE), TRUE);GetDlgItem(IDC_CREATEFILE)->EnableWindow(TRUE);            //Button_Enable(hwndCtl, FALSE);GetDlgItem(IDC_CLOSEFILE)->EnableWindow(FALSE);         }}void CMyMMFShareDlg::OnOpenfile() {         // See if a memory-mapped file named MMFSharedData already exists.         HANDLE hFileMapT = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE,            FALSE, TEXT("MMFSharedData"));         if (hFileMapT != NULL) {            // The MMF does exist, map it into the process's address space.            PVOID pView = MapViewOfFile(hFileMapT,                FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);            if (pView != NULL) {               // Put the contents of the MMF into the edit control.               //Edit_SetText(GetDlgItem(hwnd, IDC_DATA), (PTSTR) pView);   GetDlgItem(IDC_DATA)->SetWindowText((PTSTR) pView);               UnmapViewOfFile(pView);            } else {               chMB("Can't map view.");            }            CloseHandle(hFileMapT);         } else {            chMB("Can't open mapping.");         }}