程序为了防止多次运行,代码片段如下:
  ......
  //创建共享内存
  hApmsSystemTable = CreateFileMapping((HANDLE)0xffffffff, &sa, PAGE_READWRITE, 0,
(DWORD)sizeof(APMSSYSTEMTABLE), APMS_NAME_SYSTEM_TABLE );
  if ( hApmsSystemTable == 0 )
  {
     sprintf( szBuff,"APMS System Table CreateFileMapping error" );
     MessageBox( NULL, szBuff,lpFuncName, MB_OK | MB_ICONSTOP );
     ApmsSystemExit(1);
  }  
  else
  {
     // Check of system existence
     if ( GetLastError() == ERROR_ALREADY_EXISTS )
     {
sprintf( szBuff,"APMS System is already existing!!" );
MessageBox( NULL, szBuff,lpFuncName, MB_OK | MB_ICONSTOP );
CloseHandle(hApmsSystemTable);
ApmsSystemExit(1);
     }
  }
  
  lpApmsSystemTable = MapViewOfFile(hApmsSystemTable, FILE_MAP_ALL_ACCESS,0,0,0);
  if( lpApmsSystemTable == NULL )
  {
      sprintf( szBuff,"System Table MapViewOfFile error " );
      MessageBox( NULL, szBuff, lpFuncName, MB_OK | MB_ICONSTOP );
      CloseHandle(hApmsSystemTable);
      ApmsSystemExit(1);
   }   
   程序退出时我执行如下的内存卸载代码
   ......
   if ( lpApmsSystemTable ) 
   {
      ret = UnmapViewOfFile( lpApmsSystemTable );
      lpApmsSystemTable = NULL;
      sprintf(szDebug,"Start unmap hApmsSystemTable return[%d].",ret);
      LogInfo(szDebug);
   }             
   CloseHandle(hApmsSystemTable);
   hApmsSystemTable = NULL;
   LogInfo("Close Handle Successfully!");   我查看日志时发现执行UnmapViewOfFile( lpApmsSystemTable );返回1表示执行成功的。但是退出应用程序,并再次执行时却提示:APMS System is already existing!!。我只能通过重启机器才能解决。
   请问如何才能将内存映射释放干净?