是 #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可以
用别人写好的驱动。google一下winio。
是 #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/
_input();_output()
#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可以
#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/
#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;
}
通用性强,资料和实例也多
------------------------------------------
看一下以下几个函数和结构吧
OVERLAPPED
COMMTIMEOUTS
DCBCreateFile
ReadFile
WriteFile
ClearCommError
PurgeComm
GetOverlappedResult
GetCommState
SetCommState
SetCommTimeoutsCreateEvent
SetEvent
WaitForSingleObject