阅读:2135回复:8
关于USB应用程序出错
我在写一个USB应用程序, 但是遇到问题了
我的代码 DWORD ReqLength; DWORD Flags = DIGCF_PRESENT|DIGCF_DEVICEINTERFACE; GUID CardGuid = {0x80510701, 0x1414, 0x0708, {0x20, 0x04, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}; HDEVINFO hCard = INVALID_HANDLE_VALUE; PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceDetailData; SP_DEVICE_INTERFACE_DATA DeviceInterfaceData; DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); hCard = SetupDiGetClassDevs(&CardGuid, NULL, NULL, Flags); if (hCard == INVALID_HANDLE_VALUE){ ShowRecv("SetupDiGetClassDevs error!\r\n"); } else { ShowRecv("SetupDiGetClassDevs success!\r\n"); } for (int index = 0; index < 50; index++) { BOOL status = SetupDiEnumDeviceInterfaces(hCard, NULL, &CardGuid, index, &DeviceInterfaceData); CString tmp; if (status == TRUE) { tmp.Format("SetupDiEnumDeviceInterfaces index: %d SUCCESS!\r\n", index); } else { tmp.Format("SetupDiEnumDeviceInterfaces index: %d Error! Error code = %d\r\n", index, GetLastError()); } ShowRecv(tmp); } SetupDiEnumDeviceInterfaces 这里总是出错, 但是我确认了很多次guid是对的 请问各位前辈, 出错原因可能是什么呢, getlasterror得到的错误代码是259 |
|
沙发#
发布于:2005-01-26 11:33
259错误:没有可用的数据了。
就是没有你指定guid的设备或类 可能是驱动没装或设备没有连接 你的是什么设备? |
|
|
板凳#
发布于:2005-01-26 11:39
我用的是一根USB数据线连接手机
但是为何SetupDiGetClassDevs是成功的呢 而且我可以用bushound来收发数据, 这个usb数据线 有几个端点, 有的端点是虚拟的串口,有的端点则是USB的, 我现在要通过这个usb端点来通信 |
|
地板#
发布于:2005-01-26 11:41
现在我在SetupDiEnumDeviceInterfaces之前加了
SetupDiEnumDeviceInterfaces来获取设备信息 但是SetupDiEnumDeviceInterfaces也是失败的, 错误代码相同 |
|
地下室#
发布于:2005-01-26 13:41
你是想安装该USB设备的驱动吗? 这样肯定是得不到你要得结果.
你可以先用DDK下的Setup例子中FindDevice函数,你应该就明白问题出在哪里. |
|
|
5楼#
发布于:2005-01-26 13:51
驱动用的是官方的驱动
我现在想写应用程序,来收发数据的 |
|
6楼#
发布于:2005-01-27 20:43
驱动用的是官方的驱动 驱动用的是官方的! 那么你的手机就是作为U盘用了,可能还是GUID不对,你用这个{0x53f56307L, 0xb6bf, 0x11d0, {0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}}; 可以找到你电脑上的所用的硬盘,当然也可以找到你的U盘。然后用ReadFile(),writeFile()读写即可。至于用设备自己的GUID为什么不行,我也至今没弄清楚,还请高手指点一二。 |
|
7楼#
发布于:2005-01-28 10:28
我说的是官方是指手机厂商提供的驱动程序, 而不是系统提供的
|
|
8楼#
发布于:2005-01-28 16:57
你把你的Flags 重设一下,也许这个错误会消失
|
|
|