我必须将应用程序从C ++(一个工作的)转换为C#。但是,在新的C#代码中,我无法使用WinUsb_ReadPipe读取数据,尽管在其他操作中成功,例如WinUsb_GetDescriptor,WinUsb_QueryDeviceInformation,WinUsb_Initialize,WinUsb_WritePipe。
在我设置的WinUsb_SetPipePolicy(读取)中,
对于WinUsb_SetPipePolicy(写入),我只设置TRANSFER_TIMEOUT = 1000。
当我执行WinUsb_ReadPipe时,事务FAIL和Last错误是121(ERROR_SEM_TIMEOUT)。
这是我用来读取管道的代码。
if (!(InTEGRAusbHandle.IsInvalid))
{
do
{
bytesReaded = nBytesToRead;
try
{
isSuccess = NativeMethods.WinUsb_ReadPipe(
InTEGRAusbHandle,
InTEGRA_BULK_IN.PipeId, //PipeId = 131
bRxBuffer, //bRxBuffer[65536]
nBytesToRead, //64
ref bytesReaded,
IntPtr.Zero);
}
catch (Exception ex)
{
isSuccess = false;
return false;
throw;
}
if (!isSuccess)
{
System.Console.WriteLine(Marshal.GetLastWin32Error());
}
timeoutCounter++;
} while ((isSuccess == false) && (timeoutCounter <= 1));}
执行代码后,我得到了