2022年Delphi内存映射文件例子 .pdf
《2022年Delphi内存映射文件例子 .pdf》由会员分享,可在线阅读,更多相关《2022年Delphi内存映射文件例子 .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Delphi内存映射文件例子收藏unit FileMap; interface uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,StdCtrls,Dialogs; type TFileMap=class(TComponent) private FMapHandle:THandle; /内存映射文件句柄 FMutexHandle:THandle; /互斥句柄 FMapName:string; /内存映射对象 FSynchMessage:string; /同步消息 FMapStrings:TStringList; /存储
2、映射文件信息 FSize:DWord; /映射文件大小 FMessageID:DWord; /注册的消息号 FMapPointer:PChar; /映射文件的数据区指针 FLocked:Boolean; /锁定 FIsMapOpen:Boolean; /文件是否打开 FExistsAlready:Boolean; /是否已经建立过映射文件 FReading:Boolean; /是否正在读取内存文件数据 FAutoSynch:Boolean; /是否同步 FOnChange:TNotifyEvent; /当内存数据区内容改变时 FFormHandle:Hwnd; /存储本窗口的窗口句柄 FPNe
3、wWndHandler:Pointer; FPOldWndHandler:Pointer; procedure SetMapName(Value:string); procedure SetMapStrings(Value:TStringList); procedure SetSize(Value:DWord); procedure SetAutoSynch(Value:Boolean); procedure EnterCriticalSection; procedure LeaveCriticalSection; procedure MapStringsChange(Sender:TObje
4、ct); procedure NewWndProc(var FMessage:TMessage); public constructor Create(AOwner:TComponent);override; destructor Destroy;override; procedure OpenMap; procedure CloseMap; procedure ReadMap; procedure WriteMap; property ExistsAlready:Boolean read FExistsAlready; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
5、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - property IsMapOpen:Boolean read FIsMapOpen; published property MaxSize:DWord read FSize write SetSize; property AutoSynchronize:Boolean read FAutoSynch write SetAutoSynch; property MapName:string read FMapName write SetMapName;
6、property MapStrings:TStringList read FMapStrings write SetMapStrings; property OnChange:TNotifyEvent read FOnChange write FOnChange; end; implementation constructor TFileMap.Create(AOwner:TComponent); begin inherited Create(AOwner); FAutoSynch:=True; FSize:=4096; FReading:=False; FMapStrings:=TStrin
7、gList.Create; FMapStrings.OnChange:=MapStringsChange; FMapName:=Unique & Common name; FSynchMessage:=FMapName+Synch-Now; if AOwner is TForm then begin FFormHandle:=(AOwner as TForm).Handle; FPOldWndHandler:=Ptr(GetWindowLong(FFormHandle,GWL_wNDPROC); FPNewWndHandler:=MakeObjectInstance(NewWndProc);
8、if FPNewWndHandler=nil then raise Exception.Create(超出资源 ); SetWindowLong(FFormHandle,GWL_WNDPROC,Longint(FPNewWndHandler); end else raise Exception.Create(组件的所有者应该是TForm); end; destructor TFileMap.Destroy; begin CloseMap; SetWindowLong(FFormHandle,GWL_WNDPROC,Longint(FPOldWndHandler); if FPNewWndHan
9、dlernil then FreeObjectInstance(FPNewWndHandler); FMapStrings.Free; FMapStrings:=nil; inherited destroy; end; procedure TFileMap.OpenMap; var TempMessage:array0.255 of Char; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - begin if (FMapHand
10、le=0) and (FMapPointer=nil) then begin FExistsAlready:=False; FMapHandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,FSize,PChar(FMapName); if (FMapHandle=INVALID_HANDLE_VALUE) or (FMapHandle=0) then raise Exception.Create(创建文件映射对象失败!) else begin if (FMapHandle0) and (GetLastError=ERROR_ALREAD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Delphi内存映射文件例子 2022 Delphi 内存 映射 文件 例子
限制150内