All articles(网络文学目录) All Pictures(图片目录) All Softwares(软件目录)

 
delphi内存映像的步骤

Writer: aaa Article type: Programming skills(编程技巧) Time: 2014/7/19 0:09:44 Browse times: 291 Comment times: 0

delphi内存映像的步骤


Head photo

Go homepage
Upload pictures
Write articles

delphi内存映像的步骤

内存映像的步骤
在Win32 上的所有共享内存都依赖于Win32 的内存映像文件I/O 的支持。一个内存映像文件使用共享内存来提供公共的基于文件的共享数据。
内存映像文件I/O 是Win32 API 处理磁盘文件的一种方式。如果对虚拟内存不控制数据缓冲和内存缓冲,则当一个文件被映像到内存区时,从映像内存读写数据和从文件中读写数据会产生同样的效果。内存映像文件I/O 效率很高,且使用非常方便。内存映像文件I/O 允许两个或多个进程共享基于文件的数据。每个和共享有关的进程直接存取一组公共页。由于共享导致可用资源最很小,所以当大量的数据必须被共享时,通过内存映像文件I/O 共享就显得非常有用。
内存映像文件的支持需要3 个Windows 内核对象:文件、文件映像和视图。为了映像一个文件到内存,首先从磁盘打开一个文件,再建立映像文件,然后将映像文件连接到内存。为了在不同进程间使数据同步,它提供了一个基于磁盘文件的逻辑连接,最终通过一个数据地址指针来实现对数据块的访问。一个内存映像文件对象可以创建多个视图,它们可以分别存取文件的不同部分。
使用内存映像文件I/O 需遵循以下步骤。
1.打开磁盘文件
打开磁盘文件可采用CreateFile 或OpenFile 等函数。打开一个基于磁盘的文件,一般采用OpenFile()
函数,其原型如下:
function OpenFile(const lpFileName:LPCSTR;var lpReOpenBuff:TOFStruct;uStyle:UINT
):HFILE;stdcall;
POFStruct=^TOFStruct;
TOFSTRUCT=record
cBytes:Byte;
fFixedDisk:Byte;
nErrCode:Word;
Reserved1:Word;
Reserved2:Word;
szPathName:array[0..OFS_MAXPATHNAME-1] of CHAR;
end;
注意:OpenFile 的返回值为-1 时,表示打开文件失败。参数uStyle 定义了打开文件标示(OF_READ、OF_WRITE、OF_READWRITE 等)、文件被其他进程共享的文件方式(OF_SHARE_EXCLUTIVE、OF_SHARE_DENY_WRITE 等),以及文件打开时采取的动作(OF_CREATE、OF_DELETE、OF_EXIST 等)。在不再使用该文件时,记得调用函数CloseHandle。
2.创建文件映像对象
通过函数CreateFileMapping 创建文件映像对象,才能使用内存映像文件。CreateFileMapping 函数的第1 个参数使用上一步得到文件句柄,当然,也可以设置为$FFFFFFFF,这时文件映像对象是基于内存的,而不是基于文件的。lpszMapName 参数是给文件映像对象起的名字,必须确保其惟一性,因为与一个未知进程的名字冲突会产生非希望的共享。
除了CreateFileMapping 函数之外,还有两个函数可以操作文件映像对象,分别是OpenFileMapping和DuplicateHandle。
3.创建视图对象
创建视图对象需要调用MapViewOfFile()函数。
注意:可以在一个文件中创建多个视图,以便分别访问文件的不同部分。调用MapViewOfFile函数时需要传递视图在文件的起始位置偏移和要映射的字节数。





There are 0 records,
Comment:
Must be registered users to comment(必须是注册用户才能发表评论)

Disclaimer Privacy Policy About us Site Map
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.