Qt学习:Qt5.9.2+vs2017移植usb第三方库

第三方库Hidapi用于实现usb通信,将它移植成功以用来实现qt做一个usb通信的上位机。
首先是下载hidapi-0.7.0源码:http://www.signal11.us/oss/hidapi/
源码文件夹截图如下:
Qt学习:Qt5.9.2+vs2017移植usb第三方库_第1张图片
打开window下文件夹。
这里由于源码所带的vs工程是基于32系统的,所以我们不能直接编译该工程 ,而且会报错。
此时,通过vs2017新建一个空项目,仿照源码中的工程 ,在其中加入hid.c源文件和hidapi.h头文件。
hidapi.h位于上面截图中hidapi下。
注意要把hidapi.h拷贝到工程目录下。
建好的vs工程截图如下:
Qt学习:Qt5.9.2+vs2017移植usb第三方库_第2张图片
此时要注意在工程属性中进行设置,否则会报错:
Qt学习:Qt5.9.2+vs2017移植usb第三方库_第3张图片
常规->配置类型中选择:动态库.dll
Qt学习:Qt5.9.2+vs2017移植usb第三方库_第4张图片
链接器->输入->附加依赖项加入setupapi.lib

接下来用
Debug x64模式编译文件,会生成所需要的动态库。
我们需要三个文件:hidapi.h hidapi.dll hidapi.lib
hidapi.dll 和 hidapi.lib 在所建工程的一级目录下 x64 ->debug下
在这里插入图片描述

接下来新建一个测试工程 :hidtest
将头文件hidapi.h拷贝到工程目录下,
新建hidtest.cpp,加入如下代码进行简单测试:

#include
#include
#include
#include “hidapi.h”
int main(int argc, char* argv[])
{
int res;
unsigned char buf[256];
#define MAX_STR 255
wchar_t wstr[MAX_STR];
hid_device *handle;
int i;

#ifdef WIN32
UNREFERENCED_PARAMETER(argc);
UNREFERENCED_PARAMETER(argv);
#endif

struct hid_device_info *devs, *cur_dev;

devs = hid_enumerate(0x0, 0x0);
cur_dev = devs;
while (cur_dev) {
	printf("Device Found\n  type: %04hx %04hx\n  path: %s\n  serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number);
	printf("\n");
	printf("  Manufacturer: %ls\n", cur_dev->manufacturer_string);
	printf("  Product:      %ls\n", cur_dev->product_string);
	printf("  Release:      %hx\n", cur_dev->release_number);
	printf("  Interface:    %d\n", cur_dev->interface_number);
	printf("\n");
	cur_dev = cur_dev->next;
}
hid_free_enumeration(devs);

// Open the device using the VID, PID,
// and optionally the Serial number.
////handle = hid_open(0x4d8, 0x3f, L"12345");
handle = hid_open(0x17ef, 0x6018, NULL);
if (!handle) {
	printf("unable to open device\n");
	return 1;   //可以通过返回值确认程序出错位置
}
system("pause");
return 0;

}
进行工程属性设置:
Qt学习:Qt5.9.2+vs2017移植usb第三方库_第5张图片
在附加库目录中加入hidapi.lib所在文件夹目录
Qt学习:Qt5.9.2+vs2017移植usb第三方库_第6张图片
在附加依赖项中加入hidapi.lib

如果编译通过,返回值为0,说明该库正确,可以正确打开hidusb设备。

注意代码:handle = hid_open(0x17ef, 0x6018, NULL);
此处vid和hid值需要通过前面枚举出的设备值修改以对应自己电脑上的设备,否则无法正确打开。
调试里可以先把打开设备那几行代码注释掉,单独查看枚举出的hidusb设备信息。否则会因为if语句中的return 1; 导致程序一闪而过,无法观察。

调试好这个,接下来可以在qt工程中正常使用代码。 注意配置好工程,拷贝好相应文件。

你可能感兴趣的:(Qt)