阅读:1526回复:12
win2k下的并口操作,请指教
我用
HANDLE m_hCardInterFace = CreateFile(\"\\\\\\\\.\\\\LPT1 \", GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, NULL, NULL); 打开并口成功后,对并口进行了写操作,结果在WriteFile函数中没有了反应 DWORD dwRead; unsigned int command = 0xff; BOOL ret = WriteFile( m_hCardInterFace, &command, 1, &dwRead, NULL); 不知道有什么不妥的地方?是否和同步还是异步方式有关呢? 另外,所谓的对并口写是否就是只对数据寄存器进行写呢?还是也可以对 控制和状态寄存器进行操作呢? 谢谢! |
|
最新喜欢:wm_cre... |
沙发#
发布于:2003-07-10 09:26
对端口进行读还是写操作,要看硬件的设计了,一般情况下,控制口是用来写的,状态口是用来读的,数据口,可以是双向的。
个人之见 |
|
|
板凳#
发布于:2003-07-10 09:40
这个我知道,就是不知道为什么WriteFile函数不能返回。
我的并口是空的,我想试试可不可以直接对它进行操作 因为并口的三个register是相连的i/o空间中的地址,所以我 想如果可以写数据口的话,那么如果增加我写内容的长度,比如 从Byte到Word什么的,那么或许可以对状态或控制寄存器进行操作 了,当然我想这也取决底层驱动实现的write操作 |
|
地板#
发布于:2003-07-10 11:01
没有硬件,这个函数使用正确的话,也能成功返回啊,好好看看这个函数的使用说明,并口的寄存器都是8位的,用BYTE就可以了。你往哪个口写数据,这个函数里的地址偏移量就用哪个 口对应的地址与基地址的差值就可以了。这个很简单应当没什么问题的。
|
|
|
地下室#
发布于:2003-07-10 11:23
那个函数我几经看了好几遍msdn了,实在是看不出有什么地方有问题
另外,你所说的哪个口的问题我不是很明白啊,函数参数中也没有对应的参数啊,打开并口后,所有的东西就是一个句柄,我想再user mode下也不太可能让你直接用端口地址吧。 谢谢你参与讨论这个问题,要不你看看WriteFile这个函数,不胜感激,呵呵 |
|
5楼#
发布于:2003-07-10 13:24
我是用DS写的ISA的驱动,我是用的DEVICEIOCTL,我想WRITEFILE和这个差不多。
在你的WRITEFILE这个函数里的参数:&command, 1,我感觉用的不太对,这个1表示什么?应该上是缓冲区的大小,就是:&command的大小,你换成sizeof(unsigned int)试试。 个人之见! 不必客气! |
|
|
6楼#
发布于:2003-07-10 13:35
我试过了,没用
我想那个参数可能是用在缓冲区包含了多于要写的内容的时候 |
|
7楼#
发布于:2003-07-10 20:44
你试着在应用程序里用malloc函数分配一个缓冲区。
|
|
|
8楼#
发布于:2003-07-16 13:47
to juventus : first 首先确定是否已打开了并口: second 应把得知换成unsigned int command = 0xff 强制装换成dword; 我用过这样的程序,应该能解决!!! |
|
|
9楼#
发布于:2003-07-16 18:57
老大,用unsigned int太浪费了,用unsigned char哦
|
|
10楼#
发布于:2003-07-16 19:03
看我的,别笑:(
void __fastcall TForm1::TrackBar1Change(TObject *Sender) { dmxdata=TrackBar1->Position; Label1->Caption=IntToStr(dmxdata); DWORD number; HANDLE h; a=&dmxdata; h=::CreateFile(\"LPT1\",GENERIC_WRITE,0,0,OPEN_EXISTING,0,0); ::WriteFile(h,a,1,&number,NULL); ::CloseHandle(h); } 如果要查并口状态,可以这样 if(h==INVALID_HANDLE_VALUE) { ;//你的代码 } } |
|
11楼#
发布于:2003-07-17 12:24
先看看WriteFile函数的返回代码再分析。这样才能有的放矢。
|
|
12楼#
发布于:2004-01-05 21:03
WriteFile (hLpt1, pBuffer, iFileLength * sizeof (TCHAR),&dwBytesWritten, NULL) ;
|
|