我对内存映射文件非常陌生,有一些迷失。
我知道如果我有一个文件,我可以使用MMaps加载它并从不同的进程访问它。
但在我的情况下,我正在创建一个附加到进程A的DLL,并且该DLL已经被赋予了指向由进程A准备的cSurface的指针。我需要与进程B共享该cSurface的数据。我真的不想打电话给一个空白的MMap并将我的进程A的表面复制到其中,只是为了在进程B中再次复制它。
是否可以将我的表面映射为文件,以便在创建时MMap已经指向表面数据(就像加载SomeTextFile.txt时那样)?
我的计划理论上是在Proc A中接收表面指针,告诉Windows共享该表面的内存,并使用Mutexes协调访问-想法是两个进程都读取相同的物理副本表面,而没有繁琐的复制。
这可行吗?
char buffer[SUPER_MASSIVE]
的巨大缓冲区和一个名为hSuperMassiveFile
的巨大文件。我可以通过CreateFileMapping(hSuperMassiveFile,...)
来共享SuperMassiveFile,但我想使用相同的方式来处理我的缓冲区。有没有办法这样做:CreateFileMapping((HANDLE)buffer,...)
,而不必请求一个空地图,然后将我的缓冲区复制到其中? - Chris D