void ddd(HANDLE hFile,...)
{....
    SetFilePointer(hFile, lDistanceToMove, NULL, FILE_BEGIN);
.......
}
   HANDLE hFile=CreateFile(......);//GENERIC_READ|GENERIC_WRITE
    DWORD dwFileSize=GetFileSize(hFile,NULL);
    HANDLE hFileMap=CreateFileMapping(.....);//PAGE_READWRITE
PVOID pvFile=MapViewOfFil(hFileMap,FILE_MAP_WRITE,0,0,0);//FILE_MAP_WRITEddd(pvFile,....);
执行到SetFilePointer的时候,为什么总是出错,错误是无效句柄.

解决方案 »

  1.   

    你是在Win98/ME/95下面吗,也许可能是这个原因:
    Windows Me/98/95:   File handles that are used to create file mapping objects must not be used in subsequent calls to file I/O functions, such as ReadFile and WriteFile. In general, if a file handle is used in a successful call to the CreateFileMapping function, do not use that handle until you close the corresponding file mapping object.
      

  2.   

    SetFilePointer(hFile, lDistanceToMove, NULL, FILE_BEGIN);//hFile是有效句柄吗
      

  3.   

    在void ddd(HANDLE hFile,...)
    {....
        SetFilePointer(hFile, lDistanceToMove, NULL, FILE_BEGIN);
    .......
    }
    中,可看到是有效地址,指向一EXE,开始字节MZ.....;
      

  4.   

    调用了MapViewOfFile,返回的是“内存指针”,而不是“文件句柄”,也就是说pvFile是PVOID类型指针,而不是HANDLE类型句柄。既然是指针,只要强制转化成char*或者BYTE*类型指针,就可以直接访问,用不着SetFilePointer了。
      

  5.   

    [url]http://www.programfan.com/club/showbbs.asp?id=218907[url]