У меня есть этот небольшой кусочек кода.
[DllImport("library.dll", EntryPoint = "SomeoneElsesReadFunction")]
[return: MarshalAs(UnmanagedType.U4)]
private static extern UInt32 SomeoneElsesReadFunction(
Int16[] data,
Int16[] dataOrig,
[MarshalAs(UnmanagedType.U2)]
Int16 buffsize,
ref int smpNum,
);
затем ...
var returnCode = SomeoneElsesReadFunction(Buffer, OrigBuffer, Consts.BufferSize, ref _sampleNumber);
int errorCode;
if ((errorCode = Marshal.GetLastWin32Error()) != 0)
{
throw new Exception(string.Format("Device read failed. Windows System Error Code: {0}", errorCode));
}
, который происходит в более широком цикле, выполняемом несколько раз в секунду.
Я продолжаю получать errorCode
из 183 на каждой итерации цикла.Когда я проверяю в VS-отладчике, я вижу, что Последняя ошибка Win32 равна 183 до вызова SomeoneElsesReadFunction()
, а затем - 183.
Но есть ли способ очистки / сброса этого значения перед вызовом метода,так что я могу быть уверен, что когда я проверю впоследствии, что ошибка определенно возникает в методе с каждым вызовом, а не просто осталась от предыдущего вызова?
Редактировать
Чтобы прояснить путаницу с returnCode
, оригинальный метод по какой-то причине возвращает код = 0 даже в конкретном состоянии ошибки, которое мне нужно проверить.По этой причине мне нужно вызвать GetLastWin32Error()
, даже если returnCode равен 0 (ОК).