我有一点点代码。
[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
由于某种原因,即使在我需要检查的特定错误条件下,原始方法也会返回 code = 0 。因此,GetLastWin32Error()
即使 returnCode 为 0(OK),我也需要调用。