Delphi的BUG????!!!!
下面这段程序在Delphi的IDE中运行正常,但单独运行却出现地址冲突,
如果将BuildCommDCB('9600,N,8,1',CommDCB)这句去掉后,正常。而用C语言重写后,BCB编译后再单独运行正常。
Dephi4,delphi5,delphi6的现象一样,以上系统我在是Win98,win98se2都测试过,而在Win2000下正常。
var
CommDCB:TDCB;
hComm:Integer;
begin
hComm := CreateFile('COM1',
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
SetupComm(hComm,65536,4096);
BuildCommDCB('9600,N,8,1',CommDCB);//将这句去掉后,正常
SetCommState(hComm,CommDCB);
FileClose(hComm);
end;
问题点数:50、回复次数:9Top
1 楼cobi(我是小新)回复于 2001-12-23 07:57:10 得分 5
估计时系统问题Top
2 楼hawk26(老武)回复于 2001-12-23 10:43:48 得分 0
var
pDcb : _DCB;
Begin
hFile := CreateFile( 'COM1', GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
GetCommState(hFile,pDcb); //应该加上这句
BuildCommDCB('9600,N,8,1',pDcb);
SetCommState(hFile,pDcb);
CloseHandle( hFile );
end;Top
3 楼Ykang()回复于 2001-12-24 09:46:42 得分 0
To hawk26(老武):
老兄,单独运行还是要出错啊。 Top
4 楼962veiri(风尘旅人)回复于 2001-12-24 09:55:03 得分 5
我也出过跟你类是的经历,就是在编译环境正常运行
到单独执行就不响应,很痛苦,我现在都不知道什么原因Top
5 楼zhujianzhou()回复于 2001-12-24 10:05:06 得分 5
你的输出缓冲太大了,用65534试试,另外一般先用GetCommState函数填充DCB结构,再用SetCommState写回才行,试试吧Top
6 楼Ykang()回复于 2001-12-24 10:24:41 得分 0
to zhujianzhou():
老兄,我在测试hawk26(老武)兄的程序同样出这个问题,他的程序没有设缓冲区啊,后来我把65536改成4096,也是一样啊,但同样的代码为什么在BCB却没事呢?
Top
7 楼Ykang()回复于 2001-12-24 13:41:47 得分 0
难道就没有人知道吗?Top
8 楼hawk26(老武)回复于 2001-12-24 19:13:18 得分 35
哥们,你把buildCommDCB去掉,改为直接操作pDcb,这样:
pDcb.BaudRate := 9600;
pDcb.StopBits := 1;
pDcb.ByteSize := 8;
pDcb.Parity := 0;
我用过下面的方法,是为了使串口能收到null字符:
hFile := CreateFile( PChar(gszPort), GENERIC_READ or GENERIC_WRITE,
0,
nil, //0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,
0);
GetCommState(hFile,pDcb);
pDcb.Flags := pDcb.Flags and $FFFFF7FF;
SetCommState(hFile,pDcb);
CloseHandle( hFile );
单独运行正常。Top
9 楼Ykang()回复于 2001-12-26 09:39:48 得分 0
to hawk26(老武):
老兄,谢谢你,你真是个热心人啊,我知道可以用另外的方法,但我不明白为什么BuildCommDCB就是要出错。
我的同事用VC++测试,如果用BuildCommDCB("9600,N,8,1",&Dcb)同样运行出错,
但如果这样;
CString b="9600,N,8,1";
BuildCommDCB(b,&Dcb);//代码好象是这样的
就对啦
准备收分吧。
Top




