zoukankan      html  css  js  c++  java
  • Qt探索之路——加载第三方API

    date:2017/04/24 14:42

    开发环境:Qt 5.8.0 msvc2015 32bit + VS Community 2015

    由于Qt不带有完整的USB API,因此在做通信时需要使用第三方API来实现。

    1、编译生成API库文件

    首先介绍一下要用到的API。

    我做的是hid通信,网上常见API有三种:

    HID API(下载地址:http://github.com/signal11/hidapi/downloads

    libusb(下载地址:https://github.com/libusb/libusb/archive/master.zip

    libhid(下载地址:http://alioth.debian.org/frs/?group_id=30451

    其中hidapi和libhid均是基于libusb针对hid设备接口进行二次开发而成。我在项目中刚开始使用的是hidapi,目前正在尝试libhid。

    这里简单说明一下hidapi和libhid的区别:

    hidapi可以说是libapi的简化版,使用更为简便,但功能也相对单一,仅提供基本的设备初始化、枚举、关闭、读写操作。作者@飞奔在原野这篇博客中写道:

      HIDAPI只能提供对单一接口、单一端点的控制,也就是说,它只能控制默认接口、默认端点的数据传输。

    而libhid则可以实现对HID设备的多接口、多端点的控制,通过查看源码可以证实这一点:

    hidapi:

    int HID_API_EXPORT HID_API_CALL hid_read(hid_device *device,
    unsigned char *data,
    size_t length
    )
    libhid:
    hid_return hid_interrupt_read(HIDInterface *const hidif,
    unsigned int const ep,//指定传输端口
    char *const bytes,
    unsigned int const size,
    unsigned int const timeout    
    )

    传输方式均为中断传输。

    (关于USB中的传输方式,可以参考:usb中的endpoint(端点)和传输模式

    然后开始生成库文件。

    上述的api都提供了Windows、Linux、Mac OS等多平台支持。以我使用的Windows为例,找到msvc文件夹(或者Windows相关文件夹)打开vs的解决方案文件.sln,运行vs2015进行编译。注意,在生成——配置管理器中,如果开发平台选的是Win32,相应的Qt编译器也必须是32位(例如我的就是msvc2015_x86)。如果平台不对应会导致Qt工程加载api库后找不到相关文件。

    2、添加库文件

    库文件生成成功后,在win32——debug——dll文件夹中找到.dll和.lib文件,拷贝到Qt工程所在目录下,同时还需要拷贝api的头文件.h并将头文件包含到其他头文件中。在Qt工程配置文件.pro中,右键——添加库——外部库,添加文件路径,即可将库文件添加到Qt工程。

    这时,如果马上调用库中的函数进行编译,Qt可能会报错LNK2019或者LNK1120:

    因此在添加库文件后,最好将构建目录的Debug(或者Release)文件夹删除,重启Qt然后重新编译工程。

    本博客为作者原创,转载请注明出处。
  • 相关阅读:
    一则线上MySql连接异常的排查过程
    有一种娱乐叫看别人编程
    程序员DNS知识指南
    中国式开源
    RSS与公众号
    论国人的素质和一个公司的商业道德
    《阿里游戏高可用架构设计实践》阅读笔记
    《淘宝数据魔方技术架构解析》阅读笔记
    软件体系架构_系统质量属性场景描述_结合《淘宝网》实例
    《余额宝技术架构及演进》阅读笔记
  • 原文地址:https://www.cnblogs.com/shawn06/p/6757039.html
Copyright © 2011-2022 走看看