在WINDOWS下有什么办法可以读写任一个IO端口?除了写驱动外。

解决方案 »

  1.   

    98下可以,2000下不行。
    _input();_output()
      

  2.   


    #include <conio.h>int _inp( unsigned short port );unsigned short _inpw( unsigned short port );unsigned long _inpd( unsigned short port );int _outp( unsigned short port, int databyte );unsigned short _outpw( unsigned short port, unsigned short dataword );unsigned long _outpd( unsigned short port, unsigned long dataword );98可以
      

  3.   

    用别人写好的驱动。google一下winio。
      

  4.   


    #include <conio.h>int _inp( unsigned short port );unsigned short _inpw( unsigned short port );unsigned long _inpd( unsigned short port );int _outp( unsigned short port, int databyte );unsigned short _outpw( unsigned short port, unsigned short dataword );unsigned long _outpd( unsigned short port, unsigned long dataword );98可以///////////////////////////////
    正好说反了,2000下可以,98下不可以,
    另外这个不是太好的方法,可能会出错并受到限制,MSDN上介绍好像着使用的是DOS虚拟机上的函数,只是访问的虚拟的物理端口,然后驱动程序把虚拟端口映射到物理端口,所以在98和2000下最好都用驱动的方法,winio是这样做的,98下写了VXD驱动来操作端口,2000下用#include <conio.h>int _inp( unsigned short port );unsigned short _inpw( unsigned short port );unsigned long _inpd( unsigned short port );int _outp( unsigned short port, int databyte );unsigned short _outpw( unsigned short port, unsigned short dataword );
    等来操作端口,所以建议98下面用winio,2000下自己写驱动吧,如果2000下的不会写,我这里有http://yds_086.html.533.net/
      

  5.   

    不是的,98下可以,2000下不行的。利用winio好些
      

  6.   

    楼上不信去看看winio代码
    #include <windows.h>
    #include <winioctl.h>
    #include <conio.h>
    #include "port32.h"
    #include "..\drv\nt\winio_nt.h"
    #include "..\drv\9x\winio_9x.h"
    #include "winio.h"
    bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize)
    {
      tagPort32Struct Port32Struct;
      DWORD dwBytesReturned;
      
      if (!IsWinIoInitialized)
        return false;  if (IsNT)//如果是winnt/2000/xp
      {
        switch (bSize)
        {
          case 1:        *pdwPortVal = _inp(wPortAddr);      break;      case 2:        *pdwPortVal = _inpw(wPortAddr);      break;      case 4:        *pdwPortVal = _inpd(wPortAddr);      break;
        }
      }
      else//win9x
      {
       Port32Struct.bSize = bSize;
       Port32Struct.wPortAddr = wPortAddr;
       
       return DeviceIoControl(hDriver, WINIO_READPORT, &Port32Struct, sizeof(Port32Struct),
                              pdwPortVal, sizeof(DWORD), &dwBytesReturned, NULL);
      }  return true;
    }
    在2000下的单布运行结果是调用了 
    switch (bSize)
        {
          case 1:        *pdwPortVal = _inp(wPortAddr);      break;      case 2:        *pdwPortVal = _inpw(wPortAddr);      break;      case 4:        *pdwPortVal = _inpd(wPortAddr);      break;
    }
      

  7.   

    最好使用window的api这样什么版本的windows都可以用了
    通用性强,资料和实例也多
    ------------------------------------------
    看一下以下几个函数和结构吧
    OVERLAPPED
    COMMTIMEOUTS
    DCBCreateFile
    ReadFile
    WriteFile
    ClearCommError
    PurgeComm
    GetOverlappedResult
    GetCommState
    SetCommState
    SetCommTimeoutsCreateEvent
    SetEvent
    WaitForSingleObject
      

  8.   

    CreateFile();只能打开驱动程序,通过驱动程序倒是能访问端口,但是前提是有驱动
      

  9.   

    下载 winio吧,里面有说明我原程序.