LibUsbDotNet Win32Error:错误代码87

时间:2016-02-18 17:10:17

标签: c# windows-8.1 usb-drive libusbdotnet libusbk

我遇到USB设备问题。我正在用C#开发一个与该设备通信的应用程序。为了进行这种通信,我使用的是LibUsbDotNet库。 问题如下,我的沟通在我公司的许多计算机上完美运行。但是还有其他人(直到现在两台电脑)它才行不通。在这些中,当我尝试写入设备时,它给我一个Win32Error:错误代码87(无效参数)。 奇怪的是,我使用的是与其他计算机中使用的驱动程序相同的驱动程序。他们甚至使用相同的操作系统(Windows 8)。 我使用UsbK开发套件附带的“Driver Install Creator Wizard”创建的这个驱动程序。我使用UsbK来创建驱动程序,因为它们使用了更新版本的libusb驱动程序。我有其他设备,我做了同样的事情,他们都工作正常,只是这一个让我头疼。 研究这个问题,我找到了Usblyzer软件。在插入PC时运行它并分析我的设备信息,我看到有问题的计算机中打开的管道数为0。在一切正常的地方,是3.这与问题有关吗?我知道如何解决它?

以下是我用来重现问题的小代码。原始应用程序非常庞大。

private void OnUsbDeviceNotify(object sender, DeviceNotifyEventArgs e)
{
    if (e.Device == null)
        return;

    int vid = e.Device.IdVendor;
    int pid = e.Device.IdProduct;

    if (vid == Vid && pid == Pid)
    {
        switch (e.EventType)
        {
            case EventType.DeviceArrival:
                ConnecDevice();
                break;
            case EventType.DeviceRemoveComplete:
                Reader = null;
                Writer = null;
                break;
        }
    }
}

private void ConnecDevice()
{
    UsbDeviceFinder usbDeviceFinder = new UsbDeviceFinder(Vid, Pid);

    UsbDevice usbDevice = UsbDevice.OpenUsbDevice(usbDeviceFinder);

    if (usbDevice == null)
        return;

    if (!usbDevice.IsOpen)
        usbDevice.Open();

    IUsbDevice iUsbDevice = (IUsbDevice)usbDevice;

    iUsbDevice.SetConfiguration(1);
    iUsbDevice.ClaimInterface(1);

    int transferLengthWrite;

    Reader = usbDevice.OpenEndpointReader(ReadEndpointID.Ep01);
    Writer = usbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);

    ErrorCode erro = Writer.Write(ReadValuesCommand, 0, 2, WriteTimeout, out transferLengthWrite);
    Console.Write(erro);

    if (erro != ErrorCode.Success)
        return;

    Thread.Sleep(500);

    int transferLengthRead;

    byte[] values = new byte[ValuesSize];

    Reader.Read(Values, 0, ValuesSize, ReadTimeout, out transferLengthRead);

    ProcessValues(values);
}

0 个答案:

没有答案