QT之usb接口开发
来源:互联网 发布:单片机中断程序例子 编辑:程序博客网 时间:2024/04/27 07:49
QT之usb接口开发
本人是第一次使用QT这个开发工具,完全被QT的例子所吸引,里面提供了很多简单而又实用的例子。
QT是一个很好的GUI开发工具,使用QT开发的GUI可以用炫酷来形容,特别是QT可以调用图形处理器,使得图形图像渲染起来更容易,不占用cpu资源。
废话少说,说一下QT开发USB接口,一个能够和外部通信的GUI才是真正实用的。
我们开发USB为了节省时间,可以引用windows自带的hid.dll这个动态库,或者使用libusb.dll这个开源库。
关于什么是dll文件
用一个通俗的说法,其实就是封装着许多函数的集合文件。
我们可以各种语言均可以调用封装在dll中的函数,从而完成对dll文件的使用。
如何查看dll文件中的函数
我们可以使用DLL Export Viewer这个工具查看。
下图是查看HID.dll这个库的截图
如何用QT调用DLL
下面给出我写的一段程序,程序参考了QT的一些例子。程序是运行在QT5.3版本的。
首先要将DLL文件和程序放在同一个目录里。掉用DLL有很多种方法,我仅测试并成功了着一种,首先是要将我们需要的dll定义成QLibray类型,然后用QLibray类的成员函数操作dll文件,下面的例子中使用了libusb的给64位操作系统使用的dll,就是libusb0_x64.dll。通过调用QLibrary中的load()函数可以载入DLL文件。
其中调用dll中函数的时候,使用了指向函数的指针。
下面的语句定义了一个返回值为int的指向函数的指针类型。
typedef int (*Fun)();
定义后可以使用Fun function1;将function1定义为指针。
下面的语句定义了一个返回值为struct usb_bus的指向函数的指针类型。
typedef struct usb_bus *(*Fun_bus)();下面是源代码。
#include <QApplication>#include <QLibrary>#include <QDebug>#include <QMessageBox>#include "lusb0_usb.h" //引入头文件typedef int (*Fun)(); //定义函数指针,以备调用typedef struct usb_bus *(*Fun_bus)();struct usb_bus *bus;struct usb_device *dev;int Al;QString temp,temp1;int main(int argc,char **argv){ QApplication app(argc,argv); QLibrary mylib("libusb0_x64.dll"); //声明所用到的dll文件,并将mylib定义成Qlibrary类 类型 mylib.setLoadHints(QLibrary::ResolveAllSymbolsHint); int result; if (mylib.load()) //判断是否正确加载 { QMessageBox::information(NULL,"OK","DLL load is OK!"); Fun open=(Fun)mylib.resolve("usb_init"); //援引 usb_init() 函数 initialize the library if (open) //是否成功连接上 open() 函数 { QMessageBox::information(NULL,"OK","Link to Function is OK!"); result=open(); <span></span>//这里函数指针调用dll中的 open() 函数 qDebug()<<result; } else { QMessageBox::information(NULL,"NO","Linke to Function is not OK!!!!"); } Fun usb_find_busses=(Fun)mylib.resolve("usb_find_busses");// find all busses usb_find_busses(); Fun usb_find_devices=(Fun)mylib.resolve("usb_find_devices");// find all connected devices usb_find_devices(); Fun_bus usb_get_busses=(Fun_bus)mylib.resolve("usb_get_busses");// find all connected devices for (bus = usb_get_busses(); bus; bus = bus->next) { //dev = bus->devices; for (dev = bus->devices; dev; dev = dev->next) { Al=dev->descriptor.idVendor; temp=QString::number(Al,16); Al=dev->descriptor.idProduct; temp1=QString::number(Al,16); QMessageBox::information(NULL,"Got it","VID:PID=0x"+temp+":0x"+temp1); } } } else QMessageBox::information(NULL,"NO","DLL is not loaded!"); return 0; //加载失败则退出28}}
运行结果如下
0 0
- QT之usb接口开发
- QT开发之XML(DOM接口)
- QT开发之XML(SAX接口)
- QT开发之XML(Stream接口)
- USB驱动开发之端点,管道和接口,信息流动
- Mac下usb转串口Qt开发
- USB开发基础之USB命令和USB描述符
- USB开发基础之USB命令和USB描述符
- USB架构概述之二物理接口
- 胡言乱语之USB开发忏悔
- USB设备开发之STM32
- Android开发之USB数据通信
- MacOSX开发之USB通讯
- Android开发之USB数据通信
- USB接口
- usb接口
- USB接口
- QT开发之音频
- MySQL的timeout相关配置参数小结一把
- 近阶段计划 - 图论算法理论、实现及应用
- Java虚拟机_内存管理_内存分配
- C#中的Invoke
- opencv RNG
- QT之usb接口开发
- 将原有的MyEclipse中的项目转成maven项目----新建一个maven项目把原项目按照新项目的框架移植过去
- TagSupport类的生命周期及获取主机名的步骤
- NOIP2014T2
- POJ_3420_Quad Tiling_搜索,矩阵快速幂,状态压缩,动态规划
- GossipView:圆圈布局的自定义view
- 服务器环境配置之虚拟机安装
- 【甘道夫】CDH5.2的Maven依赖
- 双向循环链表-C语言版