请问一点关于并口的问题

rubbishtin 2009-02-23 04:35:45
上次发了个帖子问了一下并口的问题,一位老大提醒用creatfile,我自己写了一段代码出了点问题,还请各位老大花点时间给解答一下
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

HANDLE m_hCardInterFace;
COMMTIMEOUTS m_CommTimeouts;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
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);
}
else
{
Label1->Caption = "fail" ;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char lpOutBuffer[100] = {0} ;
DWORD dwBytesWrite=1;
COMSTAT ComStat ;
DWORD dwErrorFlags;
bool bWriteStat;

ClearCommError(m_hCardInterFace,&dwErrorFlags,&ComStat);
bWriteStat = WriteFile(m_hCardInterFace,lpOutBuffer,dwBytesWrite,&dwBytesWrite,NULL);
if(!bWriteStat)
{
Label1->Caption= "write fail" ;
}
else
{
Label1->Caption = "OK" ;
}
CloseHandle(m_hCardInterFace);
}
//---------------------------------------------------------------------------

程序跟踪到WriteFile()那里就没反应了,请问是什么问题呢?
...全文
74 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rubbishtin 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 protoss_huang 的回复:]
我以前用VC做个,是用winio动态库做的。在网上在看看,应该有。
[/Quote]

我查过winio貌似不支持中断的是吧?好像就只能读写并口吧
protoss_huang 2009-03-15
  • 打赏
  • 举报
回复
我以前用VC做个,是用winio动态库做的。在网上在看看,应该有。
rubbishtin 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Behard 的回复:]
如果是在并口上接设备,还是需要写自己的驱动的

或者直接 IO 控制
[/Quote]

我是要把自己做的一个dsp板子通过并口的epp协议与pc机通信的,在bcb中是不是有函数可以直接对io口进行读写呢?或者在pc机上能不能像读写dsp一样直接对某个地址读写数据呢?小弟是做电子的,对pc编程了解的比较少,还希望各位老大多多赐教啊。。。
Behard 2009-02-24
  • 打赏
  • 举报
回复
如果是在并口上接设备,还是需要写自己的驱动的

或者直接 IO 控制
Behard 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xabcxyz 的回复:]
不同意1楼观点,虽然我没有做过并口访问。但是应该和串口雷同的。

不过楼主使用并口连接什么设备啊?为win32api的createfile打开设备文件lpt1然后写入文件,发送的必须是可打印文件,连接设备同样会有协议要求。建议发送一小段文本文件试试。
[/Quote]

就是不一样的,MS 在串口的驱动中做了处理,而并口驱动没有加载更多的功能
SetCommTimeouts 函数仅仅支持串口的,并不支持并口
xabcxyz 2009-02-24
  • 打赏
  • 举报
回复
不同意1楼观点,虽然我没有做过并口访问。但是应该和串口雷同的。

不过楼主使用并口连接什么设备啊?为win32api的createfile打开设备文件lpt1然后写入文件,发送的必须是可打印文件,连接设备同样会有协议要求。建议发送一小段文本文件试试。
My_Love 2009-02-23
  • 打赏
  • 举报
回复
一位老大提醒用creatfile
----------------------
那位老大和你开玩笑呢...


只有打印机连接到并口,你的程序才不会死!
如果是想连接其他设备如SPI,JTAG等,自己写驱动吧.

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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