0

私はこの小さなコードを持っています。

[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) の場合でも呼び出す必要があります。

4

2 に答える 2