|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2004/2/26 19:44:35 |
标题: |
|
加入我的收藏 |
楼主: |
各位高手,我最近编了一个程序,其中用到了串口通信(电脑com口),使用的是spcomm控件,因为我是在win98下编写、调试的,使用很正常。但最近我将系统换成了win2000,串口通信就不能使用了,老是报告端口未打开。请帮我想想办法,如何解决?spcomm控件就没法用在win2000吗?那有没有更好的控件?api 函数我就的复杂了些,不打算用。
----------------------------------------------
- |
作者: |
|
2004/2/26 20:14:20 |
1楼: |
hNewCommFile := CreateFile( PChar('\\.\'+FCommName),//20040226 GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0 );
----------------------------------------------
-
|
作者: |
|
2004/2/26 20:19:51 |
2楼: |
你在SPCOMM控件的源程序中修改下就可以用了 在FCommName前面加上\\.\就可以了,加了以后为PChar('\\.\'+FCommName)。
----------------------------------------------
-
|
作者: |
|
2004/2/26 20:54:12 |
3楼: |
谢谢!我去试试。如何和问题还得请教你。
----------------------------------------------
-
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2004/2/26 22:21:10 |
4楼: |
学习!
----------------------------------------------
|
作者: |
|
2004/2/27 10:13:24 |
5楼: |
zhouyf001: 我按你所说的方法试了,但还是不行。我装的是win2000sp4。如何办?
----------------------------------------------
-
|
作者: |
|
2004/2/27 10:28:43 |
6楼: |
换个串口试试,也说不定您现在用的串口已经被占用了(被别人或自己未释放)。
----------------------------------------------
-
|
作者: |
|
2004/2/27 10:34:52 |
7楼: |
换串口的方法我试了,还是不行。
----------------------------------------------
-
|
作者: |
|
2004/2/27 12:43:10 |
8楼: |
请将此保持在论坛首页。我急等待回复。
----------------------------------------------
-
|
作者: |
|
2004/2/27 23:49:58 |
9楼: |
我试了一下。应该不是串口打不开,而是发送失败。 procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:="";
commflg:=true;
for i:=1 to 6 do
begin
if not fcomm.comm1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(sbuf[i],2)+" ";
end;
viewstring:="发送"+viewstring;
fcomm.memo1.lines.add(viewstring);
fcomm.memo1.lines.add("");
if not commflg then messagedlg("发送失败!",mterror,[mbyes],0);
end; 但程序运行到这段程序中时就报告发送失败。我想应该是发送缓存的问题吧,如何解决?
----------------------------------------------
-
|
作者: |
|
2004/3/1 16:50:30 |
10楼: |
你不是用DELPHI编程的吧,若用C++应该这样写 hNewCommFile := CreateFile( PChar('\\\\.\\'+FCommName),//20040226 GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0 ); ----------------------------------------------
在一般的Windwos中我们只需要写“comx”这样。 而实际的参数是“\\.\comx”,Windows自己给转换了。不错吧,它比较智能化。 但是, 大于com10时,他就开始偷懒,Windows又不给转换了,需要自己写成" \\.\comx" 但在C语言中,“\”又有特殊作用,所以要写成为“\\\\.\\comx”
----------------------------------------------
-
|
作者: |
|
2004/3/1 17:08:17 |
11楼: |
var sbuf:array [0..5] of char; fcomm.comm1.writecommdata(sbuf,6);
----------------------------------------------
-
|
作者: |
|
2004/3/1 17:24:25 |
12楼: |
我在Win2003 Server下也用这个控件做了一个串口的小程序,很小,不好意思拿出来;要的话,联系QQ:241268990,我现在下班,晚上7点半找我吧!!
----------------------------------------------
生命中,不断地有人离开或进入。于是,看见的,看不见的;记住的,遗忘了。 生命中,不断地有得到和失落。于是,看不见的,看见了;遗忘的,记住了。 然而,看不见的,是不是就等于不存在?记住的,是不是永远不会消失?
|
|