在开发了一个多线程USB烧写程序后,得到新的任务,要将HID的内容放到里面,没有人带着做细致的讲解,靠自己自生自灭:
1, 什么是HID?
(项目要的急,没有什么了解就开始了!只知道,在Windows->DeviceManager下面有时候找COM端口的时候,会去人体输入学设备里面找,里面有鼠标键盘之类的HID,具体是啥还不知道。)HID: 猜想是 Hardware ID,用来标记硬件设备的序号的,事实上不是! HID: Human Interface Device.
2,如何入手?
自生自灭当然是找开源项目,或者sample code。直接关键词搜索,找到了很多“C++ MFC界面啥的”,明显都是转载,还没写明转载地址,这里顺便诟病下CSDN,很多东西一搜,都是CSDN的,结果都是转载别人,不照顾排版的。气愤的看不到照片,没办法很好的跟着做。
终于被我找到原文出处:C++ MFC界面读写USB HID设备数据程序
我没有打算完全照着做。我打算先写个MFC最简单的界面(吹牛吧!自动生成,也敢说写)。
3,环境:
Windows 10
Microsoft Visual Studio 2017
4,过程:
1,建立一个MFC工程,基于Dialog的, 剩下默认配置。(具体参考网上教程,一般都在MFC课程的第1、2课,我的Leader已经让我放弃MFC了,太旧了,但是我目前开发的东西用这个,实现了HID后,就换!我保证!)
2, 以最简单的方式,在Dialog界面,双击Button OK,生成一个消息处理函数OnBnClickOk,然后把参考文章里的东西抄进去,边抄边编译。Till-----------Here:
#include "Setupapi.h"
#include "hidsdi.h"
void CHIDRetryDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
TRACE("Button OK In.\n");
m_ctrlHIDdevices.ResetContent();
UpdateData(FALSE);
CString temp;
int Count = 0;
DWORD strSize = 0, requiredSize = 0;
BOOL result1, result2;
ULONG DeviceInterfaceDetailDataSize;
SP_DEVINFO_DATA DeviceInfoData;
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;
GUID deviceId;
HidD_GetHidGuid(&deviceId);
//CDialogEx::OnOK();
}
我遇到了以下报错:
为了解决这个错误,我真的是以自生自灭的方式Baidu、Google了很久,试了很多方法,最后也没有解决,直到----又一次CSDN拯救了我:VC2005中为什么无法解析HidD_GetHidGuid函数? [问题点数:20分,结帖人fcymk2]
我用了其中一个被人否定的方法解决掉了(事实上,题主与我遇到的问题不同,但是他猜到了这个解决办法,并非是他的主要问题所在):
2018-12-11 Update: 目前仅仅实现到这里,华丽分割线------------------------------------------------------------------------------------------------