私はこの小さなコードを持っています。
[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));
}
これは、1 秒間に複数回実行されるより広いループ内で行われます。
errorCodeループの繰り返しごとに 183 を取得し続けます。VS デバッガーをチェックインすると、最後の Win32 エラーが呼び出す前は 183 でSomeoneElsesReadFunction()あり、その後も 183 であることがわかります。
しかし、メソッドが呼び出される前にこの値をクリア/リセットする方法はありますか?後で確認すると、前の呼び出しから残っているだけでなく、各呼び出しでメソッド内でエラーが確実に発生していることを確認できますか?
編集
との混同を明確にするために、returnCodeチェックする必要がある特定のエラー状態であっても、元のメソッドは何らかの理由でコード = 0 を返します。このためGetLastWin32Error()、returnCode が 0 (OK) の場合でも呼び出す必要があります。