Getlasterror 捕捉出错,返回值是87。一样的程序,在两台电脑上调试,同一个工程,一台返回值是0,正常的,另一台就是返回87。在程序的最前面,什么代码都没写,一开始捕捉,一台是0,一台是87,这是什么原因。
那台87返回值的,机子,第一次出错后,以后都正常了。在Getlasterror前用了openfileAPI函数。

解决方案 »

  1.   

    87 The parameter is incorrect.  ERROR_INVALID_PARAMETER 
      

  2.   

     
    //这是关于磁带备份的一段代码 先用readFile 写到 buf 在从buf写到h
    Tape(磁带), 这段程序 以前能正确运行 之后就不行了
    HANDLE hTape;
    hTape =CreateFile(TEXT("\\\\.\\TAPE0"),                   
    GENERIC_READ|GENERIC_WRITE,                             //   open   for   reading     
            FILE_SHARE_READ|FILE_SHARE_WRITE,                       //   do   not   share     
            NULL,                                                   //   no   security     
            OPEN_EXISTING,                                          //   existing   file   only     
            0,                   
            NULL);
    if(hTape!=INVALID_HANDLE_VALUE)
    {
    cout<<"打开磁带串口成功"<<endl;
    if(PrepareTape(hTape,TAPE_LOAD,FALSE)==NO_ERROR) 
      {
       cout<<"磁带已准备好"<<endl;
    if(EraseTape(hTape,TAPE_ERASE_SHORT,FALSE)==NO_ERROR)
        cout<<"格式化成功"<<endl;
    //else
    //cout<<"格式化失败"<<endl;
        }
       else
        cout<<"磁带还没有准备好"<<endl;
            //打开要备份文件句柄
      CString fileName=CString("D:\\jxy.jpg");//要备份的文件
      BYTE* buf=new BYTE[512];
      HANDLE hBackupFile = CreateFile( 
                (LPCWSTR)fileName,                                // name of tape device to open 
                GENERIC_READ|GENERIC_WRITE, // read-write access 
                0,                            // not used 
                0,                            // not used 
                OPEN_EXISTING,                // required for tape devices 
                0,                            // not used 
                NULL                                      // not used
                );
      if(hBackupFile==INVALID_HANDLE_VALUE)
      cout<<"打开文件失败"<<endl;
      else
      cout<<"打开文件成功"<<endl;
      //写入缓存,同时写到磁带中
      DWORD writeByte=0;
      DWORD readByte=0;
      int N=GetFileSize(hBackupFile,NULL)/512;//N表示要循环的次数。缓存大小定义为512
      for (int i=0;i<N;i++)
      {
     if(!ReadFile(hBackupFile,buf,512,&readByte,NULL))
     cout<<"读取文件失败"<<endl;
     else
     {
     if(WriteFile(hTape,buf,readByte,&writeByte,NULL)) 
     cout<<"开始写入磁带"<<endl;
     else
     {
     cout<<"写入磁带错误"<<endl;
         break;
    }
     }
      }
      //将剩下的数据写入磁带
    ReadFile(hBackupFile,buf,512,&readByte,NULL);
    WriteFile(hTape,buf,readByte,&writeByte,NULL);
    cout<<"写入缓存的次数:"<<N<<endl;
    cout<<GetLastError()<<endl;
    CloseHandle(hTape);
    CloseHandle(hBackupFile);
    delete buf;
    }