关于读取共享内存块中的数据 ( 积分: 100 )

  • 主题发起人 主题发起人 ayztj
  • 开始时间 开始时间
A

ayztj

Unregistered / Unconfirmed
GUEST, unregistred user!
vc++在内存中建了一个映射空间,我读取这个共享内存块中的数据:<br>其中,hmapfile是我定义的THandle,MAP_FILE_NAME是内存块的名称<br><br> &nbsp;hmapfile:=OpenFileMapping(File_Map_Read,false,pchar(MAP_FILE_NAME));<br> &nbsp;if (hmapfile&lt;&gt;0) then<br> &nbsp; &nbsp; &nbsp;MapFilePointer:= MapViewOfFile( hmapfile,FILE_MAP_ALL_ACCESS,0, 0,0);<br><br>程序在98下面完全没有问题,可以读出数据,但是换了2000或者XP,就不行了,根本读不出数据,但是也不提示报错,只是读不出数据而已。<br>在2000和XP下经过断点调试,发现不管如何,hmapfile的值始终为零,即无法获得共享内存块的句柄。因而数据自然也无法读出,但是在98下时却一切都很正常。<br>而且同学用vc++在2000和XP下均可以正常读出数据。<br>请问这到底是怎么回事呢。是OpenFileMapping本身的问题还是2000和XP系统不支持OpenFileMapping的问题呢?
 
vc++在内存中建了一个映射空间,我读取这个共享内存块中的数据:<br>其中,hmapfile是我定义的THandle,MAP_FILE_NAME是内存块的名称<br><br> &nbsp;hmapfile:=OpenFileMapping(File_Map_Read,false,pchar(MAP_FILE_NAME));<br> &nbsp;if (hmapfile&lt;&gt;0) then<br> &nbsp; &nbsp; &nbsp;MapFilePointer:= MapViewOfFile( hmapfile,FILE_MAP_ALL_ACCESS,0, 0,0);<br><br>程序在98下面完全没有问题,可以读出数据,但是换了2000或者XP,就不行了,根本读不出数据,但是也不提示报错,只是读不出数据而已。<br>在2000和XP下经过断点调试,发现不管如何,hmapfile的值始终为零,即无法获得共享内存块的句柄。因而数据自然也无法读出,但是在98下时却一切都很正常。<br>而且同学用vc++在2000和XP下均可以正常读出数据。<br>请问这到底是怎么回事呢。是OpenFileMapping本身的问题还是2000和XP系统不支持OpenFileMapping的问题呢?
 
OpenFileMapping换成CreateFileMapping试试看,CreateFileMapping函数当映射对象<br>存在时,也会打开它。
 
c++的已经忘的差不多了!
 
换成CreateFileMapping后,问题解决了。谢谢了?。<br>请问这是为什么呢?CreateFileMapping不是用来创建映射内存的吗,我现在是读取一个已经创建好的内存块啊?为什么OpenFileMapping不行呢?
 
加点延时,再试试看???
 
哦,解决了就好,我从前也碰到这问题的,贴子在这里<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=2534885<br>里面有较多朋友提供的帮助,你也可参考一下的,在贴子的较下方些
 
多人接受答案了。
 
后退
顶部