首先确保hCom是否正确打开了;其次调用GetLastError看看错误返回值,查看含义。不过HidD_GetAttributes是哪里的API?我怎么没见过?
解决方案 »
- 求一c++简易通信录管理系统的源代码
- MFC中如何使自己保存的文件显示一个图标?
- 【请教】如何编辑一个自己的类
- ReadFile,WriteFile 最小只能读一个扇区?
- OxFFFFFFFF代表什么啊?
- 我是菜鸟,想请教如何在VC下调用别人写的DLL库里的函数?紧急等待中。。。
- 我想用MFC的TREE控件实现资源浏览器,请给一点提示!
- 关于在Oracle,Access中存取BLOB型数据(讨论) ★up有分★
- 含有MsFlexGrid控件的VC程序发布的问题
- 大家帮帮忙,关于二维数组的问题!
- 怎么样去实现图标的修改?
- 侯捷<深入浅出MFC>中关于RTTI构建问题-在声明宏_AFXDLL后CRuntime的表项结构的不同。
好像打开的时候不可读写。
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 );楼主试一下
试过了,问题同样存在。
2 驱动程序的问题
能不能发更详细的资料
估计你也是利用SetupDi系列函数获取设备路径
用createfile打开端口
用writefile读写。
设备是设么设备单一的还是复合设备?
有几个端点 什么类型的端点?
是不是标准的hid设备类???
{
if( !SetupDiEnumDeviceInterfaces( ... ) )
{
SetupDiDestroyDeviceInfoList( hDevInfo );
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;
程式都可以控制usb gprs modem进行读写发短信,现在出现一个新的问题就是:
每次usb gprs modem断电后,打开程式后对设备进行写操作时,如AT指令,writefile会阻塞,返回的是超时,通过bus hound总线数据传输监视软件也看不到任何写到设备的指令,解决问题的方法就是每次都需要用windows自带的超级终端连接一下,断开后,再用程式写读都没问题了,但断电后又需要做这样的事情,不知是何原因。不知超级终端连接时是如何进行的。望各位继续发表意见。谢谢。
估计你也是利用SetupDi系列函数获取设备路径
用createfile打开端口
用writefile读写。 以上说的和你说的一样。是取得设备后再作打开端口,进行读写操作。设备是设么设备单一的还是复合设备?
设备是:usb接口的gprs modem 设备,应该是复合设备吧。有几个端点 什么类型的端点?
端点? 我是在市场上买回来的,相关资料只有它的说明书。其他的都没找着。它的百亿公司的gprs modem.
百亿公司的网址是:http://www.bykj181.com 181T型号。是不是标准的hid设备类???是标准的。因为刚接触usb ,人家又急着需要给客户。能有联系方式吗。
我做的是上位机的部分,老出错误
最后发现是驱动本身的问题,后来以bulkusb为模板改了打开设备部分的端口对应问题
问题解决了。
gprs modem我不是很了解 只能说sorry
[email protected]使我的油箱
我看了一本书。书上说。
如果打开设备就直接用路径就可以了。
create(路径,...)
这个操作成功。如果要进行通信就需要在路径后加上\\\\pipe1
pipe1是通信的端口号,可以是任意的吗?再进行create(路径+"\\\\pipe",...)
但是这样操作返回是失败的。原因何在?
1 pipe必须是下位机中已经存在的
2 驱动程序中也必须是已经把pipe name转化成实际的通道数才可以用。
其实你有空可以花2天或者更加短的时间看看ddk中的例程 例如bulkusb其中有pc机代码,写的基本上改动一点点都可以用了。
======================
我以前问别人的 你仔细看一下oushengfen (逸帆)的解释 他的回答对你可能有帮助。