工作环境(蓝色粗体字为特别注意内容)
1,系统环境:Win7 Ultimate sp1、libusb-win32 version 1.2.6.0、VC98
2、参考文献:https://www.cnblogs.com/lknlfy/p/3189949.html
手头有个老设备需要通过并口控制,无奈,笔记本电脑没有并口,只能买一个USB转并口的转接线,某宝花了28元买了一根号称支持Winxp、Win7、Win8、Win10的usb转DB25打印机线。
快递一到就迫不及待的接上电脑,驱动倒是自动成功安装,于是,打开设备管理,左看右看愣是没有看到LPT接口!通常,如果看到LPT1接口的话,在VC中可以使用如下方式打开
hPort = CreateFile("\\\\.\\LPT1",GENERIC_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hPort == INVALID_HANDLE_VALUE)
{
printf("Cannot open LPT%d!\n", port_id);
return 0;
}
虽然没看到LPT接口,但是仔细检查,发现Universal Serial Bus controllers(usb控制器)下面多了一个“usb printer support”,估计这就是这根转接线了。于是点击windows开始-Devices and printers(设备和打印机)
发现一个未指定的设备:
单击任一打印机,选择Property(属性)-Ports(端口),发现一个有意思的端口“USB001”
也就是说,如果该端口上面连接着打印机,那么 新建一个打印机设备,并且指定该端口,就能够正常使用该打印机来进行打印工作。但是,回到前面的初衷,我们是要用DB25打印机端口来跟一款老设备进行通信,而不是用来打印!既然出现了“USB001”于是灵光一闪,想到咱们在VC中能不能像下面这样写呢?
hPort = CreateFile("\\\\.\\USB001",GENERIC_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
很遗憾,打开失败,按照我上一篇博客将USB001的打印机映射到LPT1端口,在CreateFile也是打开失败。查找资料,发现有关Windows操作USB设备的方法,典型的方法有两种:1、使用Window API来操作USB端口,2、使用第三方USB库libusb-win32来操作USB端口。这里我们选择后者,因为第一种方法要安装Windows SDK,还得装一堆东西,而我手头只有一个VC98的cl编译器(囧~~~~~),纯命令行编译。下面来看看如何使用libusb-win32来操作这个USB转DB25转接线。
Step1.当然是下载libusb-win32了,libusb-win32传送门。
下载下来之后,解压,应该有以下目录
├─bin
│ ├─amd64
│ ├─ia64
│ └─x86
├─examples
├─include
└─lib
├─bcc
├─dynamic
├─gcc
├─msvc
├─msvc_i64
└─msvc_x64
这里先介绍介绍几个重要的文件夹:
(1)bin 目录主要是inf-wizard.exe这个程序,这个程序是libusb的驱动程序,需要先进行安装驱动。
(2)examples目录主要是libusb-win32的一些例程
(3)include目录存放libusb-win32的头文件
(4)lib目录主要是存放已经编译好的现成的库
首先,双击bin目录下面的驱动,选择对应usb转db25对应的端口,
记住下面这两个值,后面用到!