一、利用DLL读写端口   若在应用程序中只是简单地读写端口,利用DLL编程实现较为简便。从http://personal.vsnl.com/sr网站可下载一个免费的32位VBIO.DLL,该连接库允许在VB4、5或6中使用,共有七个函数和过程分别为: Anjan DLL的解锁过程 
Inp 端口读字节函数 
Inpw 端口读字函数 
Out 端口写字节过程 
Outw 端口写字过程 
GetLptBaseAddr 获取并口基地址的函数 
GetComBaseAddr 获取串口基地址的函数   图1(略)是一个发声示例程序的窗体,在输入框中键入一频率值并按SoundOn钮,则在PC机的扬声器中发出指定频率音调,程序中对音调的变化、声音的开关是用VBIO.DLL的过程和函数访问发声系统的定时器/计数器和控制端口实现的。编程要点:1、应在Form _Load中加入Anjan解锁过程。2、若在模块中声明函数和过程,应去掉private或用Public替代。3、VBIO.DLL应拷贝到\windows\system子目录下。   程序清单: Option Explicit 
Private Declare Sub Anjan Lib "vbio.dll" () 
Private Declare Function Inp Lib "vbio.dll" (ByVal port&) As Integer 
Private Declare Function Inpw Lib "vbio.dll" (ByVal port&) As Long 
Private Declare Sub Out Lib "vbio.dll" (ByVal port&, ByVal byt%) 
Private Declare Sub Outw Lib "vbio.dll" (ByVal port&, ByVal wrd&) 
Private Declare Function GetLptBaseAddr Lib "vbio.dll" (ByVal lpt&) As Integer 
Private Declare Function GetComBaseAddr Lib "vbio.dll" (ByVal com&) As Integer Public Sub SetFreq(soundHz As Integer) 
  '设置频率 
  If soundHz Then 
      Dim divisor As Long 
      divisor = 1193180 / soundHz 
      '计算时间常数 
      Out &H42, &HB6 
        '8253-5通道2设置为方式3 
      Out &H42, divisor Mod 256 
        '送时间常数 
      Out &H42, divisor \ 256 
          ' 
      Speaker True 
  Else 
      Speaker False 
  End If 
End Sub Public Sub Speaker(sOn As Boolean) 
  '开关声音 
  Dim portVal As Integer 
portVal = Inp(&H61)      

  If sOn Then 
      portVal = portVal Or 3    
        '低位为通道2的门控信号 
  Else                         
    '次低位为整形与门控制信号 
      portVal = portVal And (Not 3) 
  End If 
  Out &H61, portVal 
End Sub Private Sub Form_Load() 
  Anjan 
  '软件解锁 
End Sub Private Sub SoundOff_Click() 
  Speaker False 
End Sub Private Sub SoundOn_Click() 
  SetFreq Val(TextHz) 
End Sub   二、利用ActiveX处理硬件中断   在应用程序中如果需要访问存储单元、端口以及处理硬件中断,使用TVicHW32 ActiveX控件是一很好的选择,该控件是一个共享软件,支持Windows 95/98/NT,可从http://www.entechtaiwan.com/tools.htm处下载。该控件除具备直接访问存储单元和端口的功能外,还提供了丰富的处理并口的属性和方法,以及处理硬件中断的属性、方法和事件,极大地拓展了VB对低层硬件的访问控制。下面通过一个显示键盘中断次数和按键扫描码的示例介绍控件的使用过程。 
  1、下载TVicHW32压缩软件包并解压到一个目录中,如\HW。把driver子目录下的vichw00.vxd文件拷贝到\windows\system子目录下,该文件是控件访问硬件的驱动程序,使用控件前先用OpenDriver打开,最后用Close_Driver方法关闭。 
  2、把ocx子目录下的tvichw32.ocx拷贝到\windows\system子目录下,并在DOS命令行状态下键入以下命令进行注册。 
    regsvr32 tvichw32.ocx 
  3 、在VB环境下通过菜单工程--部件--控件并选择TVicHW32 ActiveX Control Module将控件添加到工具箱中。 
  4、相关的属性、方法及事件 
  方法 OpenDriver 打开支持访问硬件的驱动程序vichw.vxd(windows95下) 
  方法 CloseDriver 关闭驱动程序 
  属性 ActiveHW As Bool 驱动程序打开则为True;关闭为False 中断事件 OnHwInterrupt(ByVal HwCounter As Long, ByVal LPT_DataReg As Integer, ByVal LPT_StatusReg As Integer, ByVal ScanCode As Integer) 
    参数 
    HwCounter : 中断次数 
    LPT_DataReg : 如果使用IRQ7,则为打印并口的数据 
    LPT_StatusReg : 如果使用IRQ7,则为打印并口的数据 
    ScanKode : 如果使用IRQ1,则为按键的扫描码 
    属性    IRQNumber 指定中断号,范围IRQ1--15 
    属性    IRQMasked 中断非屏蔽则为True;屏蔽为False   图2(略)是示例的窗体,程序运行后首先按Open_Driver钮打开驱动程序,然后选择Unmarsk复选框开放中断,此时每按一次键框中分别显示该键的扫描码和中断次数。处理其它中断只需更改中断号即可(中断号1--15)。   程序清单: Public Sub ShowButtons() 
  Open_Driver.Enabled = Not HwCtrl.ActiveHW 
  Close_Driver.Enabled = HwCtrl.ActiveHW 
  B_Unmask.Enabled = HwCtrl.ActiveHW 
End Sub Private Sub Form_Load() 
  ShowButtons 
End Sub Private Sub Open_Driver_Click() 
HwCtrl.OpenDriver                         '打开驱动程序 
If Not HwCtrl.ActiveHW Then 
  MsgBox ("The driver VICHWxx not found") 
Else: 
  HwCtrl.IRQNumber = 1                   '中断号为1,键盘中断 
End If 
ShowButtons 
End Sub Private Sub Close_Driver_Click() 
HwCtrl.CloseDriver                         '关闭驱动程序 
B_Unmask.Value = 0 
ShowButtons 
End Sub Private Sub B_Unmask_Click() 
If B_Unmask.Value = 0 Then 
      HwCtrl.IRQMasked = True 
  Else 
      HwCtrl.IRQNumber = 1 
      Scan_Code = 0 
      HwCtrl.IRQMasked = False           '开放中断 
  End If 
End Sub Private Sub HwCtrl_OnHwInterrupt(ByVal HwCounter As Long, ByVal LPT_DataReg _ 
As Integer, ByVal LPT_StatusReg As Integer, ByVal ScanCode As Integer) 
  Scan_Code.Caption = ScanCode 
  IRQC.Caption = HwCounter 
End Sub