请各位高手帮忙!关于如何在Windows2000下,用VC访问并口,对外设进行读写!

stephen_zy 2002-03-04 07:10:29
在Windows2000下,如何用程序访问并口?是否需要调用Windows API?还是需要编写wdm的驱动。我的设备是一个读卡器,我有用汇编语言编写的读写程序,在Windows98下可以使用,如何修改才能在Windows2000下用,可以在VC中直接嵌套汇编语言吗?最重要的是要可以在Windows2000下用,对并口进行操作如果需要调用API需要哪几个API?是否有例子?各位高手请帮忙!!
...全文
124 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyup 2002-10-14
  • 打赏
  • 举报
回复
gz
Leehunter 2002-03-07
  • 打赏
  • 举报
回复
HANDLE m_hCardInterFace;
COMMTIMEOUTS m_CommTimeouts;
//打开并口
m_hCardInterFace =
CreateFile("LPT1",
GENERIC_WRITE,
NULL,NULL,
OPEN_EXISTING,
NULL,
NULL);
if(m_hCardInterFace!=INVALID_HANDLE_VALUE)
{
m_CommTimeouts.ReadIntervalTimeout = 1000;//读操作两个字节之间的时间(单位:毫秒)
m_CommTimeouts.ReadTotalTimeoutMultiplier = 1000;//读操作的时间(单位:毫秒)
m_CommTimeouts.ReadTotalTimeoutConstant = 1000;
m_CommTimeouts.WriteTotalTimeoutMultiplier = 1000;
m_CommTimeouts.WriteTotalTimeoutConstant = 1000;
SetCommTimeouts(m_hCardInterFace, &m_CommTimeouts);
return true;
}
//关闭并口
CloseHandle(m_hCardInterFace);
//向并口发送数据
DWORD t1,dwRead;
COMSTAT t2;
CString Command=0x0a;
Command+=CommandWord;
Command+=0x0d;
WriteFile(
m_hCardInterFace,
Command.GetBuffer (Command.GetLength ()),
Command.GetLength (),
&dwRead,
NULL);
if(!ClearCommError(m_hCardInterFace,&t1,&t2))
{
}
qhq800 2002-03-04
  • 打赏
  • 举报
回复
关注
cqjiang 2002-03-04
  • 打赏
  • 举报
回复
可以用driverstuio编写一个设备驱动程序
简单的i/o是很好编写的。
every 2002-03-04
  • 打赏
  • 举报
回复
关注
xpmao 2002-03-04
  • 打赏
  • 举报
回复
楼上的提供的outportb函数在Windows2000下是行不通的,NT内核的操作系统都不能直接访问硬件资源。

你的设备是一个读卡器,我怀疑是串口的,而不是并口,在我的印象中并口通讯是单向的。

程序访问并口可以通过调用Windows API进行读写。可以使用的API有CreateFile等,可以通过MSDN查找。关于并口和串口的源代码在www.codeguru.com上可以找到,或在google.com中搜索即可。
NowCan 2002-03-04
  • 打赏
  • 举报
回复
听说要将哪一个引脚接地才行。然后用CreateFile等等。我也不会。
Leehunter 2002-03-04
  • 打赏
  • 举报
回复
createfile(),writefile(),readfile()
wlzhjp 2002-03-04
  • 打赏
  • 举报
回复
下 面 这 几 个 函 数 是 笔 者 从 网 上淘 下 来 的,
经 过 验 证, 在Windows95 环 境 下, 的 确 可 实 现 对I/O 端 口 的 读 写。 读 者 可
以 借 鉴 使 用。
void outportb(unsigned short int port, unsigned char value)

{

// mov edx, *(&port);

__emit__(0x8b, 0x95, &port);

// mov al, *(&value);

__emit__(0x8a, 0x85, &value);

// out dx, al;

__emit__(0x66, 0xee);

}

void outportw(unsigned short int port, unsigned short int value)

{

// mov edx, *(&port);

__emit__(0x8b, 0x95, &port);

// mov ax, *(&value);

__emit__(0x66, 0x8b, 0x85, &value);

// out dx, ax;

__emit__(0xef);

}

unsigned char inportb(unsigned short int port)

{

unsigned char value;

// mov edx, *(&port);

__emit__(0x8b, 0x95, &port);

// in al, dx;

__emit__(0x66, 0xec);

// mov *(&value), al;

__emit__(0x88, 0x85, &value);

return value;

}

unsigned short int inportw(unsigned short int port)

{

unsigned short int value;

// mov edx, *(&port);

__emit__(0x8b, 0x95, &port);

// in ax, dx

__emit__(0xed);

// mov *(&value), ax

__emit__(0x66, 0x89, 0x85, &value);

return value;

}
stephen_zy 2002-03-04
  • 打赏
  • 举报
回复
是否有范例呀/
或者告诉我在什么网址
谢谢

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧