共享内存并不意味着发送和接收数据。它是为无违规的进程数创建的内存。为此,您必须遵循一些机制,例如锁,以便数据不会损坏。
在过程 1 中:
CreateFileMapping()
:它将使用最后一个参数中提供的名称创建共享内存块,如果它不存在并返回一个句柄(您可以称它为指针),如果成功。
MapViewOfFile()
:它在进程地址空间中映射(包括)这个共享块并返回一个句柄(同样你可以说一个指针)。
使用MapViewOfFile()
仅由返回的此指针,您可以访问该共享块。
在过程 2 中:
OpenFileMapping()
: 如果共享内存块是由 成功创建的CreateFileMapping()
,则可以使用相同的名称(用于创建共享内存块的名称)。
UnmapViewOfFile()
:它将取消映射(您可以从该进程地址空间中删除共享内存块)。当您使用完共享内存(即访问、修改等)后,请调用此函数。
Closehandle()
:最后要从进程中分离共享内存块,使用参数调用它,句柄由 OpenFileMapping() 或 CreateFileMapping() 返回。
尽管这些函数看起来很简单,但如果未正确选择标志,则行为会很棘手。如果您希望读取或写入共享内存,请PAGE_EXECUTE_READWRITE
在CreateFileMapping()
.
每当您希望在创建成功后访问共享内存时,请使用FILE_MAP_ALL_ACCESS
in MapViewOfFile()
。
最好在其中指定FALSE
(不要从父进程继承句柄),OpenFileMapping()
因为这样可以避免混淆。