xmemory.pas

来自「关于c++ builder编程的很好的资料」· PAS 代码 · 共 40 行

PAS
40
字号
unit xMemory;

interface

uses Windows, SysUtils, TlHelp32;

type
  tRange = record
    Start, Size: DWORD;
  end;
  TRangeList = array of tRange;
  
function MapGlobalData(const MapName: string; Size: Integer; var Ptr: Pointer): THandle;
procedure ReleaseGlobalData(var Handle: THandle; var Ptr: Pointer);

function IsGlobalDataExistent(const MapName: string): Boolean;

function GetProcessHeapList(SizeConstraint: DWORD = 0): TRangeList;

implementation

function MapGlobalData(const MapName: string; Size: Integer; var Ptr: Pointer): THandle;
begin
  Result := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, Size, PChar(MapName));
  
  if Result = 0 then
    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      Result := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, PChar(MapName));
      if Result = 0 then Exit;
    end else Exit;
  
  Ptr := MapViewOfFile(Result, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  if Ptr = nil then
  begin
    CloseHandle(Result);
    Result := 0;
  end;
  
  // 皑眔, 

⌨️ 快捷键说明

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