阅读:2240回复:7
【求助】VB编写D12应用程序一问
原来用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) 怎么回事? |
|
沙发#
发布于: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] |
|
板凳#
发布于:2004-04-04 22:35
我也在写PC部分程序,发个easyd12.dll库文件给我好吗?
|
|
地板#
发布于: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 |
|
地下室#
发布于:2004-04-04 22:59
哦,天哪,搞定了,声明SetupDiEnumDeviceInterfaces的第二个参数ByVal!!!
|
|
5楼#
发布于:2004-04-05 08:26
这是USB大全里的范例。我现在也在写这部分。有进展的话,交流一下。Email:shaoshengli@163.com
|
|
|
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] |
|
7楼#
发布于:2004-04-05 21:03
通过err.lastdllerror的返回值,查到错误提示:提供给请求操作的用户缓冲区无效。可是想不通哪里不对呀,HELP!!!
|
|