문제

다음과 같은 장면을 실행하고 있습니다.

SafeFileHandle handle = Win32API.CreateFile((deviceName + "\\" + pipeName),
                           DesiredAccess.GENERIC_WRITE | DesiredAccess.GENERIC_READ,
                           ShareMode.FILE_SHARE_WRITE | ShareMode.FILE_SHARE_READ,
                           IntPtr.Zero,
                           CreationDisposition.OPEN_EXISTING,
                           FlagsAndAttributes.FILE_ATTRIBUTE_NORMAL | FlagsAndAttributes.FILE_FLAG_OVERLAPPED,
                           IntPtr.Zero); // Marshal.GetLastWin32Error() returns 0 (success)

bool pass = Win32API.WriteFile(writeHandle, message.ToArray(), (uint)message.Count, ref bytes_written, ref over_lapped);

패스는 거짓이지만 IM이 겹치기 때문에 예상됩니다.
문제는 Marshal.getLastWin32error ()가 error_io_pending을 반환하지 않습니다. error_already_exists를 반환합니다. 오류가 파일을 만들었을 때 오류가 표시되지 않았지만 글을 쓸 때 표시되기 때문에 나에게 이상합니다. 이제 나는 액세스 할 수없는 것처럼 보이거나 적어도 이런 일이 일어나고있는 이유에 대한 설명을 얻는 방법을 알아 내려고 노력하고 있습니다.

편집 : 알겠습니다. 문제를 무너 뜨 렸고 문제가 발생하는 원인이 무엇인지 알고 있습니다.

  private void ErrorOccurred(string detailedError)
  {
     lock (mLogLock)
     {
        try
        {
           System.IO.File.AppendAllText("Device" + mDeviceHandle + "Log.txt",
           DateTime.Now.ToLongTimeString() + ": " + detailedError + Environment.NewLine);
        }
        catch (Exception ex)
        {
           System.Windows.Forms.MessageBox.Show(ex.Message);
        }
     }
  }

분명히 내부적으로 부록 텍스트 호출은 오류를 생성하는 것입니다. 이 로그 호출 후 오류를 재설정해야합니까? 나는 이것이 프레임 워크가 기능의 내부 작업에서 낮은 수준의 호출을 재설정하지 않는다는 것을 아는 데 도움이되었을 것입니다. 아, 당신은 매일 새로운 것을 배웁니다.

내가 가진 새로운 질문은이 호출 후 낮은 레벨 오류를 재설정 해야하는 것 같아요, 또는 로그 출력 (log4net과 같은 타사 도구를 사용하거나 Debug.Trace 출력을 사용하여 공상을받지 않음)을 기록하는 다른 방법이 있습니까? 기본적으로 마샬.getLastWin32error ()에 영향을 미치지 않는 추가 파일을 열기위한 어쨌든; 산출.

도움이 되었습니까?

해결책 2

나는 사용을 결정했다 Marshal.GetLastWin32Error 디버깅이 가장 좋은 방법은 아닙니다.

다른 팁

Marshal.getLastWin32error ()는 win32api.writefile () 호출 후 가장 먼저해야 할 일이어야합니다. writefile ()와 getLastWin32error () 호출 사이에 로깅 등을 예를 들어 다른 작업을 수행하지 마십시오.

dllimport 선언에서 setlasterror = true를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top