打印
[圈圈教你玩USB]

关于USB上位机程序的疑问

[复制链接]
4472|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
三块石头|  楼主 | 2009-3-26 14:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一个问题,编译圈圈书中所带例程,MyUsbHidTestApp,报一个编译错误:
myusbhidtestappdlg.cpp(168) : error C2440: 'static_cast' : cannot convert from 'BOOL (__thiscall CMyUsbHidTestAppDlg::* )(UINT,DWORD)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'
None of the functions with this name in scope match the target type

定位在>>指向的这句话上:
BEGIN_MESSAGE_MAP(CMyUsbHidTestAppDlg, CDialog)
     //{{AFX_MSG_MAP(CMyUsbHidTestAppDlg)
     ......
     ON_WM_TIMER()
>>   ON_MESSAGE(WM_DEVICECHANGE, OnDeviceChange)
     //}}AFX_MSG_MAP
END_MESSAGE_MAP()

编译环境是VC2005中文版,但我想应该跟VC6兼容吧。VC这块我实在是懂的太少,所以出了这个问题我不太知道该怎么解决……


另外一个问题,最近一直在想,如果一个USB HID设备有两个功能,用多个管道(端点),实现时PC程序应当怎么处理?因为看圈圈这个例子,没有说明PC取数据是从哪个端点取的,那么我怎么分辨(如果有)多个端点传来的数据呢?

比方说吧,打算做这么个设备,每秒会采集少量的数据,打算用端点1IN上传到PC,同时这个设备又有个shell控制台,需要在shell上做一些配置管理的工作,打算用端点2 IN 和 OUT管道通信。两个端点数据量都不大,考虑都用中断传输;为驱动简单采用HID设备。那么我应当怎么设计报告?怎么设计报告描述符?PC程序怎么区分不同端点上来的数据?

相关帖子

沙发
computer00| | 2009-3-26 15:34 | 只看该作者

可以使用不同的报告ID来区别,具体可以参看我的键盘程序

一个HID接口只能使用一对中断端点。如果你想再增加其它的中断端点,必须另外再设置一个接口,
这样就会得到两个HID兼容设备,你的程序需要对这两个HID兼容设备操作,麻烦得紧,
还不如直接使用多个报告(只需要一对中断端点),用不同报告ID的方法区分。


至于你的所说的错误,应该是类型不匹配所致。重新修改OnDeviceChange函数的定义,将它的参数改成WPARAM,LPARAM类型或许就可以了。

使用特权

评论回复
板凳
三块石头|  楼主 | 2009-3-26 16:31 | 只看该作者

按圈圈的该法通过编译了

函数返回类型和参数类型都要改

函数体定义处的函数名称改为:
LRESULT CMyUsbHidTestAppDlg::OnDeviceChange(WPARAM nEventType, LPARAM dwData)

类定义处的函数声明改为:
afx_msg LRESULT OnDeviceChange(WPARAM nEventType, LPARAM dwData );

就可以通过编译了~~
谢谢圈圈

使用特权

评论回复
地板
computer00| | 2009-3-26 17:08 | 只看该作者

看来不同的开发环境对这两个的类型定义有点不一样了。

使用特权

评论回复
5
[惊涛骇浪]| | 2012-3-21 10:46 | 只看该作者
非常感谢圈圈和网友,我也解决了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

249

帖子

1

粉丝