workman
驱动牛犊
驱动牛犊
  • 注册日期2002-02-27
  • 最后登录2003-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2086回复:8

请问:如何向打印口传递数据。

楼主#
更多 发布于:2002-03-28 14:59
在VC中,我想直接传递数据给打印口,如何才能做到呢?最好能够提供例程,20分相送!
我怕谁?
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-03-28 16:37
用户被禁言,该主题自动屏蔽!
workman
驱动牛犊
驱动牛犊
  • 注册日期2002-02-27
  • 最后登录2003-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-03-28 17:23
师兄,详细介绍一下嘛。
我怕谁?
Owen.Guo
驱动中牛
驱动中牛
  • 注册日期2001-03-30
  • 最后登录2012-03-29
  • 粉丝0
  • 关注1
  • 积分402分
  • 威望260点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-28 19:34
根据你的需要,选择你需要的方式,并口地址(378,379,37a)
1、_outp, _outpw, _outpd
软出一个字节/一个字/双字节
2、_inp, _inpw, _inpd
读入一个字节/一个字/双字节
详细的并口资料,请访问http://asm.yeah.net
Owen.Guo 祝你成功!
wilton
驱动牛犊
驱动牛犊
  • 注册日期2001-04-23
  • 最后登录2005-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-03-28 20:02
先写个驱动,调用
Ke386IoSetAccessProcess
Ke386SetIoAccessMap
授予Ring3直接IO的权限。
然后就可以了。
具体的函数说明你在网上查查看,我记不清了。
总之,这两个函数没有公开。
楼上说的不对,在NT下,Ring3不可能直接访问端口。
fkddn
驱动小牛
驱动小牛
  • 注册日期2002-03-28
  • 最后登录2005-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-03-29 15:17
打印口是个.dll文件,如果是你自己写的,是不是可以自己加一个导出函数?我没试过
zhange1
驱动牛犊
驱动牛犊
  • 注册日期2001-12-10
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-03-30 04:00
没有那麽麻烦吧!VC中使用CFile.createfile(\"lpt.....)就可!
高歌纵情,长笑舒意
耿培涛
驱动牛犊
驱动牛犊
  • 注册日期2001-12-11
  • 最后登录2007-07-13
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-03-31 23:18
并行口的访问有三中方式:spp方式,epp方式,ecp方式.
其中ecp方式我不太了解,好像和dma有关
spp方式和ecp方式可以直接通过i/o端口的访问来实现,在win98下不需要驱动程序.
spp方式下有三个端口:数据端口,状态端口,控制端口,其中数据端口只能够单向传输数据,即只能向外写数据,读数据的时候仅仅是读回写
入数据端口的数据
epp方式比spp多了几个端口,且数据端口可以双向传输数据.特别是虽然此时对端口的访问是通过对的i/o读写来实现,但是在并行口的引脚的信号不再是一般的锁存器输出,或缓冲器输入,它更类似于一个处理器发出的访问信号.当然这种转变由接口控制芯片来完成的,用户不用预.因此在用这种方式访问并口时,要注意各个引脚信号的定义已经不同于spp方式下引脚信号的定义了,这样相应的硬件接口电路也就不同了.
我想做的更好
workman
驱动牛犊
驱动牛犊
  • 注册日期2002-02-27
  • 最后登录2003-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-04-01 13:45
各位兄弟,我已经用下列代码实现了,谢谢!!
//支持立即打印
CPrintDialog dlg(FALSE);
if(!AfxGetApp()->GetPrinterDeviceDefaults(&dlg.m_pd))
{
continue;
}
unsigned long writeLen = 0, readLen = 0;
HANDLE hPrt;
hPrt = CreateFile(dlg.GetPortName(),GENERIC_READ|GENERIC_WRITE,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,//|FILE_FLAG_OVERLAPPED,
NULL);
if(hPrt == INVALID_HANDLE_VALUE)
{
AfxMessageBox(\"无法打印!\");
continue ;
}
WriteFile(hPrt,sPrintBuffer,iPrintBufLen,&writeLen,NULL);
CloseHandle(hPrt);
可惜不知道设置打印端口超时函数是啥,打印机没接就会锁死...BTW,分数少,不够分,大家凑合一下吧,呵呵。
我怕谁?
游客

返回顶部