LibUSB-Win32是一个用于Windows操作系统(Win98SE、WinME、Win2k和WinXP)上的通用USB设备驱动程序。该驱动程序允许使用者在不写任何一行核心驱动程序代码的情况下,可以访问Windows系统上的任意一个USB设备。该驱动程序具有以下特点:

l         能够与任意一个已安装的USB设备进行通信

l         可被用作自己开发的USB设备的驱动程序

l         支持批量和中断传输

l         支持USB规范中定义的所有标准设备请求

l         支持USB设备制造商的自定义请求

LibUsb-Win32是由http://libusb-win32.sourceforge.net发布的,遵守GNU Lesser General Public License(LGPL)和GNU General Public License(GPL)许可协议。这些协议明确规定:允许LibUsb-Win32用于商业软件,而不只是开源软件。

通过使用七个函数,就可以与USB设备进行简单通信了,通信的主要流程可分为以下四步:

1)       调用usb_init函数,进行初始化。

2)       打开要进行通信的USB设备的句柄。首先依次调用usb_find_busses、usb_find_devices和usb_get_busses这三个函数,获得已找到的USB总线序列;然后通过链表遍历所有的USB设备,根据已知的要打开USB设备的ID(VID/PID),找到相应的USB设备;最后调用usb_open函数打开该USB设备(在这里假设总线上没有相同VID和PID的USB设备。如果总线上存在着相同VID和PID的设备,还需要进行其他条件判断,比如设备名称,以保证是打开的是期望的USB设备)。

3)       与USB设备进行通信。使用usb_control_msg函数,向USB设备读取数据或写入数据。

4)       关闭USB设备。完成所有操作后,调用usb_close函数关闭已经打开的USB设备。

//---------------------------------------------------------- 
    
    再来介绍一下编译工具。
    MSVC(KIT里带的工程文件是VS2008的,如果你使用VS2005或VC6的话,就要自建工程了,libusb-win32的工程比较复杂,不推荐。我使用的是Visual studio 2008 RTM 90天试用版的)
    BCC(如果你装了Borland C++ Builder的话,只要修改make.cfg,然后运行ddk_make文件夹下对应的批处理文件就可以了,这里我就不介绍了)
     上面两个都是用来编译libusb-win32的动态链接库、相关工具和DEMO程序的。我们还需要WINDDK来编译驱动,即生成libusb0.sys文件。从官方提供的make.cfg文件上来看,使用的是WINDDK 7600.16385.0(WINDOW XP及以上版本) WINDDK 6001.18002(WINDOWS 2000及以下版本)。我只在MICROSOFT的官网上找到最新的 WINDDK 7600.16385.1,所以,我用的是这个。

有了VS2008和WINDDK,我们就可以开始下面的工作了。

下载源码
     你可以去官网上直接下载源码,地址是http://sourceforge.net/projects/libusb-win32/files/
     也可以通过SVN工具从 https://libusb-win32.svn.sourceforge.net/svnroot/libusb-win32 libusb-win32 检出最新的源码,我使用的是SVN工具是TortoiseSVN。
     vs2008的项目文件位于projects文件夹中。我们来看一下
 总共有7个项目。
    inf-wizard——设备驱动安装信息文件生成向导。此向导可以扫描计算机上的USB设备,并可以获取你选择的设备的VID及PID生成inf文件。


 (原文件名:inf1.jpg)  引用图片

 (原文件名:inf2.jpg)  引用图片

install-filter——filter驱动安装。filter driver 是驱动的高层境界,杀毒软件,防火墙,笔记本的多功能按键等等都会用到。
    libusb-dll——动态链接库,生成libusb0.dll。上面说的“7个函数”就封装在这里面。同时生成了libusb0.lib文件,供你的程序链接,这个文件实现了libusb0.dll的装载。
    libusb-sys——USB驱动,生成驱动文件libusb0.sys。大家不要误以为是VC++编译的,其实是makefile项目,WINDDK玩的借腹生子的把戏,借的VS的腹。
    testbulk——libusb-win32的 ”Hello,World!“。
    testlibusb——顾名思义,实现了libusb-win32驱动的设备的遍历并打印一部分设备描述信息。
    testlibusb-win——WINFORM版的testlibusb。
编译
    既然工程都建好了,先编译再说,报错了再查错找错。按 F7 编译怎个解决方案。
    没有报错,但libusb-sys生成目录下也没有libusb0.sys文件。答案在这里,libusb-sys是靠WINDDK来编译链接的。这有点像我用VS2005的IDE配合WINAVR来开发AVR单片机一样的了。
    查看libusb-sys的项目属性页,在[配置属性]的[NMAKE]栏里,查看“生成命令行”。

CD "$(ProjectDir)..\ddk_make"
CMD /C make.cmd "arch=x86" "app=driver" "noclean=true" "outdir=$(OutDir)" "DIR_INTERMEDIATE=$(IntDir)" "debugmode=true"

看来编译脚本是这个ddk_make文件夹下的make.cmd了。
    在这里
    SET MAKE_CFG=!DIR_LIBUSB_DDK!make.cfg
    查看这个make.cfg文件。
    打包的那些我就不说了,我们看看关键的两个东西。
    
    ; Default WinDDK directory(s) Adjust these values to match your environment
    ; (REQUIRED)
    WINDDK_BASE=Z:\WinDDK
    WINDDK_DIR=!WINDDK_BASE!\7600.16385.0\
    ;
    ; (optional)
    WINDDK_W2K_DIR=!WINDDK_BASE!\6001.18002\

呵呵,WINDDK放在这。在这里我想八卦一下。看他们把WINDDK放在Z盘,我猜他们是不也是用虚拟机大法无限制的使用90天试用版的呢?呵呵,纯属猜测,如有雷同,实属巧合。

把这两项改成你的WINDDK安装路径即可。比如我的是
   ; Default WinDDK directory(s) Adjust these values to match your environment
    ; (REQUIRED)
    WINDDK_BASE=E:\WinDDK
    WINDDK_DIR=!WINDDK_BASE!\7600.16385.1\
    ;
    ;没找到WINDDK6,也暂时不打算编译WINDOWS2000及以下版本的驱动,所以就注释掉了
    ; (optional)
    ;WINDDK_W2K_DIR=!WINDDK_BASE!\6001.18002\

编译一下libusb-sys。error.h 和error.c 会报 warning C4819,有个时候,编译器会把这个warning当作error,使得不能成功编译,按编译器提示的方法,用VS2008重新保存一下这两个文件即可。OK。。
    
    为Virtual_COM_Port安装我们的这个驱动吧。先用inf-wizard生成inf文件。分别复制libusb0.sys和libusb0.dll至x86文件夹下。


 (原文件名:driverfile.jpg)  引用图片

手动安装此驱动,这个就不用我多说了吧,大家都会。


 (原文件名:device.jpg)  引用图片

运行testlibusb-win测试下设备。报错!


 (原文件名:error.jpg)  引用图片

R6034错误,这个错误是因为没有将资源清单嵌入到libusb0.dll中。我们可以使用mt工具将资源清单嵌入到exe或dll中。因为libusb-win32提供的工程文件默认配置是没有生成清单文件的,所以我们还要设置一下。
libusb-dll项目属性页->链接器->清单文件;把 [生成清单] 设为 “是”,重新生成libusb-dll

开始->Microsoft Visual Studio 2008->Visual Studio Tools->Visual Studio 2008 兼容工具命令提示;

cd 入libusb-dll的生成目录

mt.exe –manifest libusb0.dll.manifest -outputresource:libusb0.dll;2

http://blog.sina.com.cn/s/blog_63447c1f01012rwb.html

LibUSB-Win32程序介绍相关推荐

  1. libusb win32简介以及应用

    1.libusb win32 作用以及安装步骤. LibUSB-Win32是一个用于Windows操作系统(Win98SE.WinME.Win2k和WinXP.Vista.Win7等)上的通用USB设 ...

  2. jna 不是有效的 win32 应用程序_教你打开程序提示不是有效的win32程序怎么办

    在对电脑的使用过程中,我们经常都会遇到一些问题.比如说打开程序出现提示"不是有效win32位程序",遇到这个问题时该如何处理呢?下面小编就给大家介绍打开程序出现系统提示" ...

  3. 将 Win32 程序移植到 Linux

          对于这个问题,网上已经有很多资料给予了介绍,但是相比于这些信息,本文立足于个人的实践,将内容具体到开发环境和源代码,我觉得还是有很多值得总结和借鉴的.         首先声明开发环境.W ...

  4. 实现 Win32 程序的消息映射宏(类似 MFC )

    对于消息映射宏,不用多说了,用过 MFC 的人都很清楚.但目前有不少程序由于各种原因并没有使用 MFC,所以本帖讨论一下如何在 Win32 程序中实现类似MFC的消息映射宏.其实 Windows 的头 ...

  5. 一个Win32程序的进化

    作者:刘铁猛 日期:2005-12-13 关键字: Win32 API 入门 声明:如果阁下想转载,在转载的时候烦劳阁下连同在下的姓名一起转载,并向[email]bladey@tom.com[/ema ...

  6. win32程序窗口的创建

    尽管Windows应用程序千变万化,令人眼花缭乱,但,消息机制和窗口过程却始终它们的基础,掌握了这两项技术,也就相当于把握住了问题的关键. 如果你以前是C程序员或是MFC的忠实用户,只要你学习过C语言 ...

  7. 动画 java_Java动画程序介绍

    Java动画程序介绍 java动画的实现,首先用java.awt包中graphics类的drawimage()方法在屏幕画出图象,然后通过定义一个线程,让该线程睡眠一段时间,到时后再切换成另外一幅图象 ...

  8. win32程序启用控制台-- 调试输出

    win32程序启用控制台(控制台文件名:conout$,conin$,conerr$) 2010-07-23 13:55:40|  分类: c++|字号 订阅 一个寻找很久,却得来全不费功夫的事情. ...

  9. 【MFC系列1】之简单Win32程序

    一.位运算 标志位组合:wParam = MK_RBUTTON|MK_CONTROL|MK_SHIFT 标志位的判断:wParam & MK_LBUTTON 标志位的分离:wParam &am ...

  10. 为什么要学Win32及Win32程序框架

    前言: 最近在看侯捷的<深入浅出MFC>,在理解MFC时觉得必须要掌握win32,才能更好的理解MFC,才能写出更有用的程序.于是将自己对win32程序的理解写了下来,供朋友们参考.文中的 ...

最新文章

  1. MIT重磅报告:一文看清AI商业化现状与未来
  2. vue 保留两位小数 不能直接用toFixed(2) ?
  3. 共创Linux防火墙,Linux防火墙iptables简明教程
  4. MySql分表、分库、分片和分区知识(转载)
  5. Windows上安装Mysql解压缩版教程
  6. startActivity( ) 与startActivityForResult( )的区别
  7. 安卓APP_ 控件(3)—— EditText
  8. [转载]聊一聊人员培养
  9. POJ 6048 泰国佛塔 【dfs搜索】【暴力大比拼】【北大ACM/ICPC竞赛训练】
  10. 轻轻松松的记住Linux系统目录结构
  11. 无需root计算机隐藏应用,应用隐藏大师APP一款极为隐秘的黑科技软件,无需Root 支持双开...
  12. 双色OLED屏图片点阵转换工具(OledTools)
  13. MISC之常用编码总结
  14. 科技业10大错误决定
  15. sqlserver 包含关系
  16. shell脚本——grep cut sort uniq tee diff paster tr等小工具的使用方法
  17. 1379690-01-3,3-Azido-D-alanine HCl结构式分享
  18. 2019太原理工大学第二届程序设计新生赛预赛暨公开赛题解
  19. Mac虚拟机安装Windows server 2003 及安装组件提示插入软盘、Outlook提示无法连接pop3服务器
  20. matlab 绘图颜色—论文配色方案

热门文章

  1. 短信验证码接收网页版常见问题解答
  2. 如何剪出一个圆形,保存出来还是圆形图片
  3. 你会爬虫吗,我来教你爬海关蜀黍
  4. Camera tuning岗位面试总结
  5. Cocos2dx 3.x创建Layer的步骤
  6. 老板驾驭经理人与元老之十诫
  7. css蒙层和新手引导的实现方式
  8. java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法
  9. 杭电1007 Quoit Design
  10. 04-05赛季欧洲冠军杯决赛.AC milan vs Liverpool