用VC++实现USB接口读写数据的程序 用VC++实现USB接口读写数据的程序 使用一个 GUIDguidHID_1查找并打开一个 USB设备 extern "C" int PASCAL SearchUSBDevice() { HANDLE hUsb; int nCount, i, j;//标记同一设备个数 HDEVINFO hDevInfoSet; BOOL bResult; PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail =NULL; memset(m_sysversion, 0, 20); GetSysVersion(m_sysversion); // 检索相关 GUID的USB设备总设备个数 if (!GetUSBList()) { return 0; } // 取得一个该 GUID相关的设备信息集句柄 hDevInfoSet = ::SetupDiGetClassDevs((LPGUID)&guidHID_1,//GUID_CLASS_USB_DEVICE, // class GUID NULL, // 无关键字 NULL, // 不指定父窗口句柄 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // 目前存在的设备 // 失败... if (hDevInfoSet == INVALID_HANDLE_VALUE) { return NULL; } // 申请设备接口数据空间 nCount = 0; bResult = TRUE; for (i=0; i< 34; i++) { bDeviceOpen = FALSE; memset(m_DeviceDesc, 0, 256); } SP_DEVICE_INTERFACE_DATA ifdata; // 设备序号=0,1,2... 逐一测试设备接口,到失败为止 while (bResult) { ifdata.cbSize = sizeof(ifdata); // 枚举符合该GUID的设备接口 bResult = ::SetupDiEnumDeviceInterfaces( hDevInfoSet, // 设备信息集句柄 NULL, // 不需额外的设备描述 (LPGUID)&guidHID_1,//GUID_CLASS_USB_DEVICE, // GUID (ULONG)nCount, // 设备信息集里的设备序号 &ifdata); // 设备接口信息 if (bResult) { ULONG predictedLength = 0; ULONG requiredLength = 0; // 取得该设备接口的细节(设备路径) bResult = SetupDiGetInterfaceDeviceDetail( hDevInfoSet, // 设备信息集句柄 &ifdata, // 设备接口信息 NULL, // 设备接口细节(设备路径) 0, // 输出缓冲区大小 &requiredLength, // 不需计算输出缓冲区大小(直接用设定值) NULL); // 不需额外的设备描述 // 取得该设备接口的细节(设备路径) predictedLength=requiredLength; // if(pDetail) // { // pDetail =NULL; // } pDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, predictedLength); pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); bR...