首先确保hCom是否正确打开了;其次调用GetLastError看看错误返回值,查看含义。不过HidD_GetAttributes是哪里的API?我怎么没见过?

解决方案 »

  1.   

    HidD_GetAttributes 是DDK的
    好像打开的时候不可读写。
      

  2.   

    HIDD_ATTRIBUTES   strtAttrib; 
    m_strPath   +=   _T("正在读取设备的标识...\r\n"); 
    m_strLog   +=   m_strPath; 
    SetDlgItemText(IDC_EDIT_REPORT,m_strLog); //到这里查询设备状态这一步时总是返回False,不知什么原因 
    if   (!HidD_GetAttributes(hCom,&strtAttrib)) 

    AfxMessageBox(_T("查询设备状态时出错!")); 

    这里有个问题,首先要对strtAttrib进行设置
    strtAttrib.Size = sizeof( HIDD_ATTRIBUTES );楼主试一下
      

  3.   

    to jennyvenus
    试过了,问题同样存在。
      

  4.   

    1   可能是对端点的打开有问题
    2   驱动程序的问题
    能不能发更详细的资料
    估计你也是利用SetupDi系列函数获取设备路径
    用createfile打开端口
    用writefile读写。
    设备是设么设备单一的还是复合设备?
    有几个端点  什么类型的端点?
    是不是标准的hid设备类???
      

  5.   

    SetupDiEnumDeviceInterfaces这以后的命令,应该用循环来找吧 do
    {
    if( !SetupDiEnumDeviceInterfaces( ... ) )
    {
    SetupDiDestroyDeviceInfoList( hDevInfo );
      

  6.   

    SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,NULL,0,&strSzie,NULL); 最后一个参数是INTERFACE_DATA *,你并没有进行传参数,第二个参数你倒传了interfacedata,那个应该传NULL。
      

  7.   

    你将代码改为循环吧,也许后面设备的是正确的 //准备查找符合HID规范的USB设备
    hDevInfo = SetupDiGetClassDevs( &guidHID, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE );
    if( INVALID_HANDLE_VALUE == hDevInfo )
    {
    return g____hid_count;
    } // 查找USB设备接口
    memset( &InterfaceData, 0, sizeof( SP_DEVICE_INTERFACE_DATA ) );
        InterfaceData.cbSize = sizeof( SP_DEVICE_INTERFACE_DATA ); i = 0; do
    {
    //枚举设备接口
    if( !SetupDiEnumDeviceInterfaces(  ) )
    {
    SetupDiDestroyDeviceInfoList( hDevInfo );
    return g____hid_count;
    } //获取设备详细信息
    length = 0;
    if( !SetupDiGetDeviceInterfaceDetail(  ) )
    {
    err = GetLastError();
    if( ERROR_INSUFFICIENT_BUFFER != err )
    {
    i++;
    continue;
    }
    } DetailData = ( PSP_DEVICE_INTERFACE_DETAIL_DATA )LocalAlloc( LMEM_ZEROINIT, length );
    if( NULL == DetailData )
    {
    SetupDiDestroyDeviceInfoList( hDevInfo );
    return g____hid_count;
    } DetailData->cbSize = sizeof( SP_DEVICE_INTERFACE_DETAIL_DATA );
    if( !SetupDiGetDeviceInterfaceDetail(  ) )
    {
    LocalFree( DetailData );
    i++;
    continue;
    } //打开设备,获取句柄
    g____hid_handle[ g____hid_count ] = CreateFile( ... );

    if( NULL == g____hid_handle[ g____hid_count ] )
    {
    LocalFree( DetailData );
    i++;
    continue;
    }
    // 查询设备标识
    Attribute.Size = sizeof( HIDD_ATTRIBUTES );
    if( !HidD_GetAttributes( g____hid_handle[ g____hid_count ], &Attribute ) )
    {
    LocalFree( DetailData );
    CloseHandle( g____hid_handle[ g____hid_count ] );
    i++;
    continue;
    } i++;
    } while( 1 );
    SetupDiDestroyDeviceInfoList( hDevInfo );
    return g____hid_count;
      

  8.   

    多谢各位提供的意见,现在设备信息可不读了。
    程式都可以控制usb gprs modem进行读写发短信,现在出现一个新的问题就是:
    每次usb gprs modem断电后,打开程式后对设备进行写操作时,如AT指令,writefile会阻塞,返回的是超时,通过bus hound总线数据传输监视软件也看不到任何写到设备的指令,解决问题的方法就是每次都需要用windows自带的超级终端连接一下,断开后,再用程式写读都没问题了,但断电后又需要做这样的事情,不知是何原因。不知超级终端连接时是如何进行的。望各位继续发表意见。谢谢。
      

  9.   

    to zhourenyun 
    估计你也是利用SetupDi系列函数获取设备路径 
    用createfile打开端口 
    用writefile读写。 以上说的和你说的一样。是取得设备后再作打开端口,进行读写操作。设备是设么设备单一的还是复合设备? 
    设备是:usb接口的gprs modem 设备,应该是复合设备吧。有几个端点     什么类型的端点?
    端点? 我是在市场上买回来的,相关资料只有它的说明书。其他的都没找着。它的百亿公司的gprs modem.
    百亿公司的网址是:http://www.bykj181.com 181T型号。
    是不是标准的hid设备类???是标准的。因为刚接触usb ,人家又急着需要给客户。能有联系方式吗。
      

  10.   

    我们以前做了一个usb音频方面的下载工具
    我做的是上位机的部分,老出错误
    最后发现是驱动本身的问题,后来以bulkusb为模板改了打开设备部分的端口对应问题
    问题解决了。
    gprs modem我不是很了解 只能说sorry
    [email protected]使我的油箱
      

  11.   

    噢,那个初始时需要用超级终端连接一下先的。不知是何问题。很难下手。
    我看了一本书。书上说。
    如果打开设备就直接用路径就可以了。
    create(路径,...)
    这个操作成功。如果要进行通信就需要在路径后加上\\\\pipe1
    pipe1是通信的端口号,可以是任意的吗?再进行create(路径+"\\\\pipe",...)
    但是这样操作返回是失败的。原因何在?
      

  12.   

    pipe不可以是任意的,
    1 pipe必须是下位机中已经存在的
    2 驱动程序中也必须是已经把pipe name转化成实际的通道数才可以用。
      

  13.   

    复合型设备是通过不同的设备接口来判定的,每个不同的设备接口都必须要有对应的驱动程序来驱动。
    其实你有空可以花2天或者更加短的时间看看ddk中的例程 例如bulkusb其中有pc机代码,写的基本上改动一点点都可以用了。
      

  14.   

    http://topic.csdn.net/u/20071031/09/73cf4991-e5d5-477d-a5d1-2daabb94b65a.html
    ======================
    我以前问别人的  你仔细看一下oushengfen (逸帆)的解释  他的回答对你可能有帮助。
      

  15.   

    我以前曾经重复打开串口出问题,后来发现在关闭时PurgeComm一次就正常了。
      

  16.   

    刚开始做usb,请教个问题,GUID是自己定义的,怎么能通过它来枚举符合条件的设备呢