I am trying to use the libusb-win32 v1.2.6.0 with Win7. I wrote a test program(showing below) but stuck with a strange problem. Here is the result: ---------------------------- D:\Work\Python34>python Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (In tel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import libusb_u2aTest as u2a 0x10c4 0x1 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\Work\Python34\libusb_u2aTest.py", line 364, in <module> pHDL = _lib.usb_open(pDevice) ValueError: Procedure probably called with too many arguments (4 bytes in excess ) >>> ----------------- I replace the troubled line with a "pass" to make the loading success, then to check the type of "pDevice", it's correct.
>>> u2a.pDevice <libusb_u2aTest.LP__usb_device object at 0x017F0120> It seems no reason that this call can be in trouble:-( Any hint was appreciated. Thanks ahead. libusb_u2aTest.py listing: ----------------------------- from ctypes import * _lib = windll.LoadLibrary("C:\\Windows\\System32\\libusb0.dll") _PATH_MAX = 512 ### Data structures... class _usb_device_descriptor(Structure): _fields_ = [('bLength', c_uint8), ('bDescriptorType', c_uint8), ('bcdUSB', c_uint16), ('bDeviceClass', c_uint8), ('bDeviceSubClass', c_uint8), ('bDeviceProtocol', c_uint8), ('bMaxPacketSize0', c_uint8), ('idVendor', c_uint16), ('idProduct', c_uint16), ('bcdDevice', c_uint16), ('iManufacturer', c_uint8), ('iProduct', c_uint8), ('iSerialNumber', c_uint8), ('bNumConfigurations', c_uint8)] class _usb_device(Structure): pass class _usb_bus(Structure): pass _usb_device._fields_ = [('next', POINTER(_usb_device)), ('prev', POINTER(_usb_device)), ('filename', c_int8 * _PATH_MAX), ('bus', POINTER(_usb_bus)), ('descriptor', _usb_device_descriptor), #('config', POINTER(_usb_config_descriptor)), # not implemented yet ('config', POINTER(c_int)), # to ease this test ('dev', c_void_p), ('devnum', c_uint8), ('num_children', c_ubyte), ('children', POINTER(POINTER(_usb_device)))] _usb_bus._fields_ = [('next', POINTER(_usb_bus)), ('prev', POINTER(_usb_bus)), ('dirname', c_char * _PATH_MAX), ('devices', POINTER(_usb_device)), ('location', c_uint32), ('root_dev', POINTER(_usb_device))] _usb_dev_handle = c_void_p ### Function prototype... # struct usb_bus *usb_get_busses(void); _lib.usb_get_busses.restype = POINTER(_usb_bus) # usb_dev_handle *usb_open(struct usb_device *dev); _lib.usb_open.argtypes = [POINTER(_usb_device)] _lib.usb_open.restype = _usb_dev_handle ### Test start... _lib.usb_init() _lib.usb_find_busses() _lib.usb_find_devices() pBus = _lib.usb_get_busses() if bool(pBus): pDevice = pBus[0].devices if bool(pDevice): print(hex(pDevice[0].descriptor.idVendor)) print(hex(pDevice[0].descriptor.idProduct)) if pDevice[0].descriptor.idVendor == 0x10c4 and \ pDevice[0].descriptor.idProduct == 0x0001: pHDL = _lib.usb_open(pDevice) # <--this line is in trouble -- https://mail.python.org/mailman/listinfo/python-list