如题!

解决方案 »

  1.   

    download winio, then u needn't write a driver urself.
      

  2.   

    那如何使用winio,我对于写驱动很菜,没有写过
      

  3.   

    端口操作不需要编写驱动,在Win95/98下直接可以使用汇编的In/Out指令。VC中也提供了_inp/_outp这样的函数(QA001059 "outportb、inportb对应的函数")。不过在NT下,不能使用In/Out指令,参考QA001296 "如何在WindowsNT/2000下用VB6写硬件IO控制"。 
        如果使用硬件中断就必须编写驱动,标准的办法是采用微软的DDK。Win98和WinNT 4.0/5.0的DDK可以从http://www.microsoft.com/ddk免费下载。从你的电子邮件来看,你是教育网的用户,那么你可以从教育网的一些FTP站点(如北大图书馆)下载到Win95/98/NT的DDK,我们下面提到的一些软件也可以找到。Win95 DDK主要是采用汇编的。如果你对汇编不熟悉,当然是使用VToolsD(http://www.vireo.com/)更好些,这个软件包允许你使用C/C++编写驱动,但软件包比较贵(约四、五百美金)。另外,你可以在http://zealsoft.nease.net/cn/ntport/或http://zealsoft.nease.net/cn/memaccess/找到与硬件有关的软件,这些软件允许你不编写驱动,直接在VC中调用驱动,如果你的编程不复杂,也可以使用。 
         
      

  4.   

    端口操作不需要编写驱动,在Win95/98下直接可以使用汇编的In/Out指令。VC中也提供了_inp/_outp这样的函数(QA001059 "outportb、inportb对应的函数")。不过在NT下,不能使用In/Out指令,参考QA001296 "如何在WindowsNT/2000下用VB6写硬件IO控制"。 
        如果使用硬件中断就必须编写驱动,标准的办法是采用微软的DDK。Win98和WinNT 4.0/5.0的DDK可以从http://www.microsoft.com/ddk免费下载。从你的电子邮件来看,你是教育网的用户,那么你可以从教育网的一些FTP站点(如北大图书馆)下载到Win95/98/NT的DDK,我们下面提到的一些软件也可以找到。Win95 DDK主要是采用汇编的。如果你对汇编不熟悉,当然是使用VToolsD(http://www.vireo.com/)更好些,这个软件包允许你使用C/C++编写驱动,但软件包比较贵(约四、五百美金)。另外,你可以在http://zealsoft.nease.net/cn/ntport/或http://zealsoft.nease.net/cn/memaccess/找到与硬件有关的软件,这些软件允许你不编写驱动,直接在VC中调用驱动,如果你的编程不复杂,也可以使用。 
         
      

  5.   

    http://www.daqchina.net/daqchina/download/winio.htmvb的例子:
    WINDOWS2000下的VB6直接端口读写操作 --- WINIO
    宋永强 中海油田服务股份有限公司(北京232信箱101149) WINACQ.DLL及WINACQ16.DLL在WINDOWS9X下为VB3编写直接端口操作类的数据采集软件提供了非常便利的条件,它不仅能准确的读入外部端口的数据,还可以向外部端口发送数据、实时读入键盘状态、实时打印列表输出等。由于其简单易用的特性,它不仅被广泛应用于数字DIO板、数字计数板、AD及DA转换板在VB3下的直接驱动,还被应用于并口和串口IO的实现。VB6在VB3下进行大规模的改进,从16位平台提升到32位平台。DAQCHINA随后将WINACQ.DLL提升至WINACQ32.DLL,满足了VB6用户在WIN9X下对端口采集的需求。无论是WINACQ,WINACQ16还是WINACQ32,均可以在WIN9X平台下使用,但它们不能在WINDOWS2000下使用。本文将为热衷于VB6编程的开发人员提供在WINDOWS2000下直接端口操作的方法。 其实有许多热心的好事者开发了WINDOWS2000下直接端口操作的驱动程序,有相当一部分是共享软件,有极少数是处于测试目的免费软件。在网上查一下你就会找到 NTPORT、MEMACCESS、PORTTALK、ALLOWIO、IOPORT、PORTIO、PORTZ、SMPORT、WINDAQ、IOVBX、IOOCX、GENPORT等用于直接IO操作的驱动,但我今天要告诉大家的是一个全免费的、无需注册的、含源程序的WINDOWS2000端口操作驱动程序WINIO。它不仅可以操作端口,还可以操作内存;不仅能在VB下用,还可以在DELPHI、VC等其它环境下使用,性能特别优异。既使是不想使用它,至少也可以提取其中的精华与自己的程序相熔合完成更优秀的软件开发。 下载地址: WINACQ        http://www.daqchina.net/daqchina/download/winacq.zip
    WINACQ16      http://www.daqchina.net/daqchina/download/winacq16.zip
    WINACQ32      http://www.daqchina.net/daqchina/download/winacq32.zip
    WINIO         http://www.daqchina.net/daqchina/download/winio.zip 需要指出的是,WINACQ、WINACQ16、WINACQ32是DAQCHINA的免费驱动(含源程序)。WINIO是YARIV KAPLAN先生的作品,该先生的详细情况请到他的站点 http://www.internals.com 了解,里面披露有许多WINDOWS不为人知的内幕。 当你得到WINIO程序包后,首先是把它解压到一个你认为合适的文件夹下面,一旦解压成功则会出现下面的四个子文件夹;  不用细说你也看的明白,Examples中放的是VB和VC的样例程序,Help中放的是CHM格式的帮助文档,Release中放的是版本的变更情况,Source中放的是WINIO的源程序。WINIO的编译程序在Source和每个Examples文件夹下面均保留了一份,其原因是WINIO是一个绿色环保软件,它不需要向注册表中添加任何信息,只要你把WINIO.VXD、WINIO.SYS、WINIO.DLL放在你的应用程序所在的文件夹下就可以了。当然了,它们也可以放到WINNT或WINNT\SYSTEM32下面,但这样做并不是件好事,因为很可能有人写的驱动程序也叫WINIO而互相覆盖影响。本文只讲最简单的例程,复杂的由读者自己完成,或叫YARIV KAPLAN领进门,修行基本靠个人吧。 双击Examples后会出现VC和VB两个文件夹,双击VB文件夹后会出现VBDumpPhys32和VBDumpPort32两个文件夹。前者放的是内存操作样例,后者存放的是端口操作样例,当然要双击后者了。  上面给出了VBDumpPort32下面存放的文件名。除WINIO.DLL、WINIO.SYS、WINIO.VXD驱动外,其它均为VB6要用的文件。如果你的系统中安装了VB6,直接双击VBDumpPort32.Vbp就可直接进入编程环境并打开此VB工程。实际上,VB6程序只和WINIO.DLL进行数据交换,WINIOI.DLL负责与WINIO.SYS或WINIO.VXD打交道。尽管对VB6编程而言,好像是在直接操作端口,但实际上所有的请求都是通过底层驱动完成的。 下面是WINIO.BAS中对函数的定义,你无需修改它。 Attribute VB_Name = "Module1"
    Option Explicit
    Declare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle) As Long
    Declare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal LinAddr) As Boolean
    Declare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As Boolean
    Declare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As Boolean
    Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As Boolean
    Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As Boolean
    Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean
    Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean
    Declare Function InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer) As Boolean
    Declare Function RemoveWinIoDriver Lib "WinIo.dll" () As Boolean 你可以直接引用WINIO.BAS到你的工程中。编写程序的方法是: 1.    在FORM_LOAD中首先判断InitializeWinIo是True还是False,它必须是True,否则后继所有与WINIO相关的操作均不能进行。 2.    在FORM_UNLOAD中执行ShutdownWinIo,将其关闭。 一旦InitializeWinIo操作成功,在你的程序中就可以使用GetPortVal读外部端口状态,用SetPortVal设置外部端口状态,与WINACQ中的FETDATA和OUTDATA使用基本相同。详细情况我就不多说了,看一下VBDumpPort32样例程序就知道了。 读端口是这样的:Result = GetPortVal(Val("&H" + TxtPortAddr), PortVal, 1)
    写端口也很简单:Result = SetPortVal(Val("&H" + TxtPortAddr), Val("&H" + TxtPortByte), 1) 重要提示:   VBDumpPort32样例程序在DESIGN方式下调试运行一定会出现Wooops,告诉你不能初始化WINIO,如果你在此处退缩了,一定是激情而来扫兴而去,可能永远也不会使用WINIO了。其实并不然,你把它编译了,运行生成的EXE文件,就什么事都没有了。尽管不十全十美,但编译后的软件还是满爽的,不掏银子的驱动能解决问题还是很不错的。   
      

  6.   

    但是我不能执行,执行就出现错误:
    Could net execute:Invalid directory(win32 error 267)