C++开发USB时缺少winusb.h头文件

拿到开发例程,用Visual Studio编译发现,提示缺少winusb.h,换了台机子也一样,然后自己在网上找解决方法,谁都没给个明确答案。最后到处搜集,看微软软件开发网上说,开发USB要个WinDDK(SDK),于是抱着试试的心态,在微软官网下了个DDK7.1安装完毕后,编译就通过了!也许有的人可以找到winusb.h,但是你编译后会提示缺少winusbdevice.h,所以还是下个SDK吧,做上位机用的到的~~

这个是下载网站:http://www.microsoft.com/en-us/download/confirmation.aspx?id=8279

winusb.h是Windows Driver Kit中的头文件,定义了WinUSB API,用于与USB设备进行通信。 WinUSB是Microsoft推出的一种通用USB驱动程序,它不需要特定的硬件驱动程序,可以直接通过USB接口与设备通信。WinUSB支持批量传输、中断传输和控制传输等多种数据传输方式,可以满足不同USB设备的通信需求。 winusb.h头文件中包含了WinUSB API的函数原型、结构体定义和常量定义等内容,可以在C/C++程序中直接使用。常用的函数包括: - WinUsb_Initialize:初始化WinUSB,打开设备并获得WinUSB接口句柄。 - WinUsb_Free:释放WinUSB接口句柄。 - WinUsb_ReadPipe:从设备读取数据。 - WinUsb_WritePipe:向设备写入数据。 - WinUsb_ControlTransfer:发送控制传输命令。 - WinUsb_QueryInterfaceSettings:查询设备接口设置。 使用WinUSB API,需要先调用SetupAPI中的函数获取设备接口信息,然后使用WinUSB API与设备进行通信。需要注意的是,使用WinUSB API需要管理员权限。 下面是使用WinUSB API读取USB设备数据的一个简单示例: ```c #include <Windows.h> #include <Winusb.h> #define VID 0x1234 #define PID 0x5678 int main() { GUID guid; HDEVINFO deviceInfoSet; SP_DEVICE_INTERFACE_DATA deviceInterfaceData; PSP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData; HANDLE deviceHandle; WINUSB_INTERFACE_HANDLE winusbHandle; UCHAR buffer[1024]; DWORD bytesRead; BOOL result; // 初始化GUID result = WinUsb_Initialize(VID, PID, &guid); if (!result) { printf("Failed to initialize GUID.\n"); return 1; } // 获取设备信息列表 deviceInfoSet = SetupDiGetClassDevs(&guid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); if (deviceInfoSet == INVALID_HANDLE_VALUE) { printf("Failed to get device information set.\n"); return 1; } // 获取设备接口信息 deviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); result = SetupDiEnumDeviceInterfaces(deviceInfoSet, NULL, &guid, 0, &deviceInterfaceData); if (!result) { printf("Failed to enumerate device interfaces.\n"); return 1; } // 获取设备接口的详细信息 DWORD size; result = SetupDiGetDeviceInterfaceDetail(deviceInfoSet, &deviceInterfaceData, NULL, 0, &size, NULL); if (!result && GetLastError() != ERROR_INSUFFICIENT_BUFFER) { printf("Failed to get device interface detail size.\n"); return 1; } deviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(size); deviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); result = SetupDiGetDeviceInterfaceDetail(deviceInfoSet, &deviceInterfaceData, deviceInterfaceDetailData, size, NULL, NULL); if (!result) { printf("Failed to get device interface detail.\n"); return 1; } // 打开设备 deviceHandle = CreateFile(deviceInterfaceDetailData->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (deviceHandle == INVALID_HANDLE_VALUE) { printf("Failed to open device.\n"); return 1; } // 初始化WinUSB result = WinUsb_Initialize(deviceHandle, &winusbHandle); if (!result) { printf("Failed to initialize WinUSB.\n"); CloseHandle(deviceHandle); return 1; } // 读取数据 result = WinUsb_ReadPipe(winusbHandle, 0x81, buffer, sizeof(buffer), &bytesRead, NULL); if (!result) { printf("Failed to read pipe.\n"); WinUsb_Free(winusbHandle); CloseHandle(deviceHandle); return 1; } // 关闭设备 WinUsb_Free(winusbHandle); CloseHandle(deviceHandle); return 0; } ``` 这个示例代码中,使用了Winusb.h头文件中的函数和结构体,通过SetupAPI获取了设备接口信息,然后使用WinUSB API与USB设备进行通信,最终读取了USB设备的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值