holyrock
驱动牛犊
驱动牛犊
  • 注册日期2003-12-27
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2240回复:7

【求助】VB编写D12应用程序一问

楼主#
更多 发布于:2004-04-02 22:57
    原来用easyd12.dll中的函数,但是一次送64B太慢了,是不是easyd12不能达到高速的?于是想用系统Api就是获得句柄,然后creatfile之类的。
    但是现在调用这个函数SetupDiEnumDeviceInterfaces时返回result始终为零,不懂怎么了?d12test和usbdebug等程序均可运行,GUID定义如下:
    LinkGuid.Data1 = &H77F49320
    LinkGuid.Data2 = &H16EF
    LinkGuid.Data3 = &H11D2
    LinkGuid.Data4(0) = &HAD
    LinkGuid.Data4(1) = &H51
    LinkGuid.Data4(2) = &H0
    LinkGuid.Data4(3) = &H60
    LinkGuid.Data4(4) = &H97
    LinkGuid.Data4(5) = &HB5
    LinkGuid.Data4(6) = &H14
    LinkGuid.Data4(7) = &HDD
    之前调用了DeviceInfoSet = SetupDiGetClassDevs _
                    (LinkGuid, _
                     vbNullString, _
                     0, _
                     (DIGCF_PRESENT Or DIGCF_DEVICEINTERFACE))
    之后就是MyDeviceInterfaceData.CbSize = Len(MyDeviceInterfaceData)
    MemberIndex = 0
        Result = SetupDiEnumDeviceInterfaces _
                 (DeviceInfoSet, _
                  0, _
                  LinkGuid, _
                  MemberIndex, _
                  MyDeviceInterfaceData)
    怎么回事?
                  

holyrock
驱动牛犊
驱动牛犊
  • 注册日期2003-12-27
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-04 21:05
    想来想去觉得是GUID的问题,采取了这几种办法:
1.在inf中的Class=USB后加了一句
  ClassGUID={77f49320-16ef-11d2-ad51-006097b514dd}
  重新安装驱动,结果说安装失败:inf找不到指定的段。
2.到注册表里找设备的GUID,在HKLM\System\CurrentControlSet\Control\Class下找到某个子键的内容有我的inf,把它换到VB里,结果一样。
3.在HKLM\System\CurrentControlSet\Enum\USB\MYVIDPID\Device Parameter下找到一个和GUID格式相同的串,在VB中替换,一样不行。
   请大侠们帮忙,哪里出错了?
   注:我用的是D12test.sys

[编辑 -  4/4/04 by  holyrock]
ZHUXK
驱动牛犊
驱动牛犊
  • 注册日期2004-03-22
  • 最后登录2004-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-04 22:35
我也在写PC部分程序,发个easyd12.dll库文件给我好吗?
holyrock
驱动牛犊
驱动牛犊
  • 注册日期2003-12-27
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-04 22:46
   谁能把VB下SetupDiGetClassDevs和SetupDiEnumDeviceInterfaces的声明贴一下,特别是SetupDiEnumDeviceInterfaces的第二个参数,大全上说可以忽略,但我忽略就出错,所以自己随便写了一个,我的声明如下:
   Public Declare Function SetupDiGetClassDevs _
    Lib "setupapi.dll" _
    Alias "SetupDiGetClassDevsW" _
    (ByRef ClassGuid As Guid, _
     ByVal Eenumerator As String, _
     ByVal hwndParent As Long, _
     ByVal Flags As Long) _
As Long
    
Public Declare Function SetupDiEnumDeviceInterfaces _
    Lib "setupapi.dll" _
    (ByVal DeviceInfoSet As Long, _
     ByRef DeviceInfoData As Long, _
     ByRef DeviceInfoDataGuid As Guid, _
     ByVal MemberIndex As Long, _
     ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA) _
As Long
holyrock
驱动牛犊
驱动牛犊
  • 注册日期2003-12-27
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-04 22:59
   哦,天哪,搞定了,声明SetupDiEnumDeviceInterfaces的第二个参数ByVal!!!
shaoshengli
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2022-02-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望77点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-04-05 08:26
这是USB大全里的范例。我现在也在写这部分。有进展的话,交流一下。Email:shaoshengli@163.com
附件名称/大小 下载次数 最后更新
2004-04-05_hid_view.rar (10KB)  51
holyrock
驱动牛犊
驱动牛犊
  • 注册日期2003-12-27
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-05 16:17
    真是多灾多难啊,现在第二次调用SetupDiGetDeviceInterfaceDetail时,死活result=0,第一次调用时返回Needed=162,但是第二次调用总不成功,查了半天没发现不对,谁指点一下吧。程序如下:
    Dim Needed As Long
    Dim DetailData As Long
    Dim DetailDataBuffer() As Byte
    Dim Result, Result1 As Long
    
    Result = SetupDiGetDeviceInterfaceDetail _
        (DeviceInfoSet, _
         MyDeviceInterfaceData, _
         0, _
         0, _
         Needed, _
         0)
        
    DetailData = Needed
    
    MyDeviceInterfaceDetailData.cbSize = Len(MyDeviceInterfaceDetailData)
    ReDim DetailDataBuffer(Needed)
    
    Result = RtlMoveMemory _
         (DetailDataBuffer(0), _
          MyDeviceInterfaceDetailData, _
          4)
          
    Result = SetupDiGetDeviceInterfaceDetail _
         (DeviceInfoSet, _
          MyDeviceInterfaceData, _
          VarPtr(DetailDataBuffer(0)), _
          DetailData, _
          Needed, _
          0)

[编辑 -  4/5/04 by  holyrock]
holyrock
驱动牛犊
驱动牛犊
  • 注册日期2003-12-27
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-05 21:03
    通过err.lastdllerror的返回值,查到错误提示:提供给请求操作的用户缓冲区无效。可是想不通哪里不对呀,HELP!!!
游客

返回顶部