前言
- 首先,对于WinIo这个驱动的介绍你可以参考这个博客利用winIO3.0进行windows10 64bit端口读取,我的测试能够成功,很大部分也是参考了这个。
- 所谓WinIo驱动程序呢,就是通过使用一种内核模式的设备驱动器和其它几种底层编程技巧,绕过了Windows系统的保护机制,允许在32位的Windows应用程序中直接对I/O端口和物理内存进行存取操作,而在64位Windows程序中有诸多前提条件的驱动程序。
- 而大家其实现在在用的很大一部分都是Window10,64位的,也很少见到32位了。所以,这篇博客的意义就显而易见了,我会尽自己所能,将整个需要讲解的东西全都详细的讲明白,所有过程都是我自己亲自试验成功的,你可以跟着一步一步来。
实验环境
首先,我使用的编译环境是Win10 64位 +VS2015 +QT5.12,使用的语言是QT。我的试验成功也打破了网上某些人对于编译环境说要求在VS2013及以下的一种错误想法,不过,也有可能是环境不一样。程序的试验环境是Win10 64位的工控机。所以,后面我的程序还会涉及到应用程序的打包。
第一步:准备实验环境
第一步首先准备好你要实验的工控机的环境吧。我就直接摘抄上面那个博客了。
- 首先,先下载WinIo驱动程序,现在网上已经很多都已经不具有什么参考价值了,我就自己在网上下载了一个:WinIO驱动程序。我如果后面有讲到什么需要的文件的话,我都放在那里了。去下载就可以了,如果失效请留言。
- 接下来,就是在你要测试的机器上开启测试模式了。你可以参考这个利用winIO3.0进行windows10 64bit端口读取进行测试模式的开启。还有就是安装WinIo64.sys的测试签名。这些你参考一下这个博客应该都可以解决。我主要讲需要注意的点:首先就是你要把WinIo64放在你运行程序的目录之前下,然后进行安装。
- 然后把
WinIo.h
,WinIo64.lib
,WinIo64.sys
,WinIo64.dll
,WINIO.VXD
这些文件都放在程序的当前目录之下,这些在我给的链接里面都有的。反正可以参考下面这个图片:
- 经过上面的步骤,基本可以说关于WinIo这部分的环境就已经配置完毕了。下面讲一下代码,然后再讲一下打包方面的事情。
第二步:代码实现
就我自己的代码来说,我使用的是以插件的形式来实现我的测试程序。
初始化
这个测试程序的初始化很简单,你只需要调用InitializeWinIo()
这个函数就可以了,然后看一下返回值。可以在插件中弄一个QMessageBox去弹出是否初始化成功。
int HTKIOTest::openDevice()
{
int retValue = 0;//非0代表的是失败,所以先暂时赋值为0
retValue =