Electron应用中USB设备transferOut报错:size参数类型异常求助
Electron USB transferOut 参数类型错误解决
问题根源
报错TypeError [ERR_INVALID_ARG_TYPE]: The "size" argument must be of type number. Received an instance of Buffer由两个核心问题导致:
- 端点类型不匹配:
0x81是IN端点(用于读取设备数据),而transferOut()仅支持向OUT端点发送数据(OUT端点地址最高位为0,比如0x01)。 - 数据类型不兼容:node-usb 2.4.3版本不支持直接传入
Uint16Array,需显式转换为Buffer才能被方法正确解析。
修复后的代码
async sendDataToDevice(device) { const data = new Uint16Array(16); data[0] = 3333; // 将TypedArray转换为node-usb兼容的Buffer类型 const sendBuffer = Buffer.from(data.buffer); // 替换为你的设备实际OUT端点地址 await device.transferOut(0x01, sendBuffer); }
关键注意事项
- 确认设备OUT端点地址:可通过USB设备描述工具查看设备的端点列表,获取正确的OUT端点地址。
- 匹配端点传输类型:确保调用
transferOut()时,端点的传输类型(批量/中断等)与设备定义一致,否则仍会触发异常。
内容的提问来源于stack exchange,提问作者rychtaradam
相关产品推荐
相关产品推荐

