⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmfshare.dpr

📁 一本已经绝版的好书
💻 DPR
字号:

// Module name: MMFShare.C ->> MMFShare.dpr
// Notices: Copyright (c) 1995-1997 Jeffrey Richter
// Translator: 刘麻子, Liu_mazi@126.com

program MMFShare;

{$R 'MMFShare.res' 'MMFShare.rc'}

uses
  Windows, Messages,
  CmnHdr in '..\CmnHdr.pas', WindowsX in '..\WindowsX.pas';

const
  g_szModName = 'MMFShare';
  IDD_MMFSHARE    =  1;
  IDC_DATA        =  100;
  IDC_CREATEFILE  =  101;
  IDC_OPENFILE    =  102;
  IDI_MMFSHARE    =  102;
  IDC_CLOSEFILE   =  103;
  g_szShareName = 'MMFSharedData';  

  // WM_INITDIALOG
function Dlg_OnInitDialog(hWnd, hWndFocus: HWND; lParam: LPARAM): BOOL;
begin
  chSETDLGICONS(hWnd, IDI_MMFSHARE, IDI_MMFSHARE);

  Edit_SetText(GetDlgItem(hWnd, IDC_DATA), 'Some test data');
  Button_Enable(GetDlgItem(hWnd, IDC_CLOSEFILE), FALSE);
  
  Result := TRUE;
end;

  // WM_COMMAND
procedure Dlg_OnCommand(hWnd: HWND; id: Integer; hWndCtl: HWND; codeNotify: UINT);
const {$J+}
  s_hFileMap: THandle = 0; {$J-}
var
  hFileMapT: THandle;
  lpView: Pointer;
begin
  case (id) of
    IDC_CREATEFILE: // 写入
      begin
        if (codeNotify <> BN_CLICKED) then Exit;

        s_hFileMap := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 4 * 1024, g_szShareName);

        if (s_hFileMap <> 0) then
        begin
          if (GetLastError() = ERROR_ALREADY_EXISTS) then
          begin
            chMB('Mapping already exists - not created', g_szModName);
            CloseHandle(s_hFileMap);
          end else
          begin
            lpView := MapViewOfFile(s_hFileMap, FILE_MAP_READ or FILE_MAP_WRITE, 0, 0, 0);
            
            if (lpView <> nil) then
            begin
              Edit_GetText(GetDlgItem(hWnd, IDC_DATA), lpView, 4 * 1024);
              UnmapViewOfFile(lpView);
              Button_Enable(hWndCtl, FALSE);
              Button_Enable(GetDlgItem(hWnd, IDC_CLOSEFILE), TRUE);
            end else
            begin
              chMB('Can''t map view of file', g_szModName);
              CloseHandle(s_hFileMap);              
            end;
          end;
        end else
          chMB('Can''t create file mapping', g_szModName);
      end;

    IDC_CLOSEFILE: // 释放
      begin
        if (codeNotify <> BN_CLICKED) then Exit;

        if CloseHandle(s_hFileMap) then
        begin
          Button_Enable(GetDlgItem(hWnd, IDC_CREATEFILE), TRUE);
          Button_Enable(hWndCtl, FALSE);
        end;
      end;

    IDC_OPENFILE: // 读取
      begin
        if (codeNotify <> BN_CLICKED) then Exit;

        hFileMapT := OpenFileMapping(FILE_MAP_READ or FILE_MAP_WRITE, FALSE, g_szShareName);
        if (hFileMapT <> 0) then
        begin
          lpView := MapViewOfFile(hFileMapT, FILE_MAP_READ or FILE_MAP_WRITE, 0, 0, 0);
          
          if (lpView <> nil) then
          begin
            Edit_SetText(GetDlgItem(hWnd, IDC_DATA), lpView);
            UnmapViewOfFile(lpView);
          end else
            chMB('Can''t map view', g_szModName);
            
          CloseHandle(hFileMapT);
        end else
          chMB('Can''t open mapping', g_szModName);
      end;

    IDCANCEL: // 退出
      begin
        EndDialog(hWnd, id);
      end;
  end;
end;

  // 对话框回调
function Dlg_Proc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
begin
  case (uMsg) of
    WM_INITDIALOG:
      begin
        Result := SetDlgMsgResult(hWnd, LRESULT(Dlg_OnInitDialog(hWnd, wParam, lParam)));
      end;

    WM_COMMAND:
      begin
        Dlg_OnCommand(hWnd, LOWORD(wParam), lParam, HIWORD(wParam));
        Result := TRUE;
      end;

    else Result := FALSE;
  end;
end;

  // 程序入口
begin
  chWARNIFUNICODEUNDERWIN95();
  DialogBox(HInstance, MakeIntResource(IDD_MMFSHARE), 0, @Dlg_Proc);
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -