vc++在内存中建了一个映射空间,我读取这个共享内存块中的数据:
其中,hmapfile是我定义的THandle,MAP_FILE_NAME是内存块的名称  hmapfile:=OpenFileMapping(File_Map_Read,false,pchar(MAP_FILE_NAME));
  if (hmapfile<>0) then
      MapFilePointer:= MapViewOfFile( hmapfile,FILE_MAP_ALL_ACCESS,0, 0,0);程序在98下面完全没有问题,可以读出数据,但是换了2000或者XP,就不行了,根本读不出数据,但是也不提示报错,只是读不出数据而已。
在2000和XP下经过断点调试,发现不管如何,hmapfile的值始终为零,即无法获得共享内存块的句柄。因而数据自然也无法读出,但是在98下时却一切都很正常。
而且同学用vc++在2000和XP下均可以正常读出数据。
请问这到底是怎么回事呢。是OpenFileMapping本身的问题还是2000和XP系统不支持OpenFileMapping的问题呢?

解决方案 »

  1.   

    if (hmapfile<>0) then
     ...
    else
     getlastError 检查下错误代码是什么
      

  2.   

    没有问题
    看看是不是你的MAP_FILE_NAME有问题
    大小写要区分
    我刚才写个简单的c++控制台程序测试了一下
    一切正常
      

  3.   

    http://blog.csdn.net/jiangsheng/archive/2004/06/24/25563.aspx
      

  4.   

    我认真检查过了,MAP_FILE_NAME确实没有问题,大小写也没有问题
    而且我在98下都能读出的,我想98下对大小写因该也同样敏感吧?用getlasterror得到的信息是getlasterror=Inaccessible value,
    这估计就是说无法进入共享内存块吧?这到底是怎么回事呢?
      

  5.   

    问题已经解决了 ,把openfilemapping改成createfilemapping就好了。