zoukankan      html  css  js  c++  java
  • 内存映射

    内存映射

    代码
    {*******************************************************}
    { }
    { Module Name: unitMemoryMap.pas }
    { Creation Date 2010-03-10 }
    { Copyright (C) 2010 Ming.z }
    { }
    {*******************************************************}
    unit unitMemoryMap;

    interface

    uses
    Windows, Messages, SysUtils, Classes;

    type
    PShareMem
    = ^TShareMem;
    TShareMem
    = packed record
    FHandle: HWND;
    FMsgBuf:
    string[50];
    FAction: Byte;
    end;

    procedure CreateMemoryMap;
    procedure DestoryMemoryMap;
    function OpenMap: Boolean;
    function CloseMap: Boolean;
    procedure ZeroMemoryMap;
    procedure WriteMapFile(const PMainHandle:HWND;const PMsg:String;PAction: Byte);

    var
    hMap: THandle;
    ShareRecord:TShareMem;
    PShare: PShareMem;
    const
    K_MapName
    = 'MsgReceptor';

    implementation

    procedure CreateMemoryMap;
    begin
    hMap:
    =CreateFileMapping($FFFFFFFF,
    nil,
    PAGE_READWRITE,
    0,
    SizeOf(TShareMem),
    K_MapName);

    if hMap=0 then
    raise Exception.Create('Error while create file')
    else
    PShare:
    =PShareMem(MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0));
    if PShare = nil then
    begin
    CloseHandle(hMap);
    end;
    end;

    procedure DestoryMemoryMap;
    begin
    if PShare <> nil then
    UnmapViewOfFile(PShare);
    if hMap<>0 then
    CloseHandle(hMap);
    end;

    function OpenMap: Boolean;
    begin
    Result :
    = False;
    hMap :
    = OpenFileMapping(FILE_MAP_WRITE,False,K_MapName);
    if hMap <> 0 then
    PShare :
    = MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0);
    if PShare <> nil then
    Result :
    = true;
    end;

    function CloseMap: Boolean;
    begin
    if PShare <> nil then UnmapViewOfFile(PShare);
    if hMap <> 0 then CloseHandle(hMap);
    Result :
    = true;
    end;

    procedure ZeroMemoryMap;
    begin
    FillMemory(PShare,SizeOf(TShareMem),
    0);
    end;

    procedure WriteMapFile(const PMainHandle:HWND;const PMsg:String;PAction: Byte);
    begin
    ShareRecord.FHandle :
    = PMainHandle;
    ShareRecord.FMsgBuf :
    = PMsg;
    ShareRecord.FAction :
    = PAction;
    CopyMemory(PShare,@ShareRecord,SizeOf(TShareMem));
    end;

    end.

  • 相关阅读:
    软件架构学习小结
    20+ 个很有用的 jQuery 的 Google 地图插件 (英语)
    网页JS获取当前地理位置(省市区)
    前端Js框架汇总(工具多看)
    MUI简介-最接近原生App体验的前端框架
    Bootstrap手机网站开发案例
    jQuery Mobile手机网站案例
    历届图灵奖 (Turing award)得奖名单
    js进阶 10-9 -of-type型子元素伪类选择器
    网页如何实现隔多久自动调用某个方法
  • 原文地址:https://www.cnblogs.com/Jekhn/p/1917809.html
Copyright © 2011-2022 走看看