阅读:1295回复:1
在win2000下如何对并口进行操作
大家好,
我现在遇见了一个问题,就是需要利用WinAP函数对并口在win2000下进行操作时,当打开并口(CreateFile)成功后,在利用WriteFile向并口写东西的时候,这个函数不能返回。为什么啊? |
|
沙发#
发布于:2004-06-24 13:57
曾经看见过一篇文章,如下,但是我的writeFile就是不能正常进行。我不知道是不是要将11、12脚接地?谁以前做过啊?
其实并口通信比串口通信更简单。 : 关于并行口(25针)针脚的定义可参见PC_CLUB版精华区“与硬件有关的东东” : 目录下的“串、并行口针脚的定义”一文,其中数据位0到数据位7分别对应于 : 针脚2到针脚9。 : 从并口发送和接收一个字节数据可通过读写I/O端口完成,与并口有关的 : 端口有3个,默认的地址是378H、379H、37AH,由于并口主要用来与打印机 : 连接,所以这3个端口的功能也是为控制打印机设计的,若用于通信,可从 : 378H发送和接收数据,另两个口作为握手信号用。 : 如果用VC编程,不必编.DLL,因为VC中可以直接读写I/O端口(当然只能在 : Win95/98下)。 补充一点吧。。。 虽然在NT环境下,内核安全模式禁止直接对端口进行操作。但在用VC++编程时, 可以利用NT的API函数CreateFile和WriteFile控制操作。应该注意的,必须将 DB25输入插座的11脚和12脚接地,否则,操作不能顺利进行。此二脚分别对应 打印机的Busy和PE(纸尽)信号。 例子代码如下: ..... HANDLE hFile;//定义文件句柄 CString m_LPTString=_T("LPT1"); BYTE* pOut=new BYTE[16]; DWORD number; //获取文件句柄 hFile=CreateFile(m_LPTString,GENERIC_READIDENERIC_WRITE,0, NULL,OPEN_EXISTING,NULL,NULL); //如果文件句柄无效 if(hFile==INVALID_HANDLE_VALUE) { AfxMessageBox("老板,LPT或者LPT1还没打开啊,别骂偶啊:P"); } } else { for(int i=0;i<16;i++) pOut='a'; //发送数据 if(!WriteFile(hFile,pOut,16,&number,NULL)) { AfxMessageBox("数据传输时死翘翘乐。。。"); break; } else { UpdateData(FALSE); } } //通知用户过程结束 Beep(800,600);//吵死你,呼呼 |
|