DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: qiaoguoqiang
今日帖子: 4
在线用户: 14
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 chinadjt (天狼星) ★☆☆☆☆ -
普通会员
2004/2/26 19:44:35
标题:
串口通信紧急呼救 浏览:1442
加入我的收藏
楼主: 各位高手,我最近编了一个程序,其中用到了串口通信(电脑com口),使用的是spcomm控件,因为我是在win98下编写、调试的,使用很正常。但最近我将系统换成了win2000,串口通信就不能使用了,老是报告端口未打开。请帮我想想办法,如何解决?spcomm控件就没法用在win2000吗?那有没有更好的控件?api 函数我就的复杂了些,不打算用。
----------------------------------------------
-
作者:
男 zhouyf001 (zhou) ★☆☆☆☆ -
盒子活跃会员
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  );
----------------------------------------------
-
作者:
男 zhouyf001 (zhou) ★☆☆☆☆ -
盒子活跃会员
2004/2/26 20:19:51
2楼: 你在SPCOMM控件的源程序中修改下就可以用了
在FCommName前面加上\\.\就可以了,加了以后为PChar('\\.\'+FCommName)。
----------------------------------------------
-
作者:
男 chinadjt (天狼星) ★☆☆☆☆ -
普通会员
2004/2/26 20:54:12
3楼: 谢谢!我去试试。如何和问题还得请教你。
----------------------------------------------
-
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2004/2/26 22:21:10
4楼: 学习!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 chinadjt (天狼星) ★☆☆☆☆ -
普通会员
2004/2/27 10:13:24
5楼: zhouyf001:
我按你所说的方法试了,但还是不行。我装的是win2000sp4。如何办?
----------------------------------------------
-
作者:
男 bjdribllec ( ) ★☆☆☆☆ -
盒子活跃会员
2004/2/27 10:28:43
6楼: 换个串口试试,也说不定您现在用的串口已经被占用了(被别人或自己未释放)。
----------------------------------------------
-
作者:
男 chinadjt (天狼星) ★☆☆☆☆ -
普通会员
2004/2/27 10:34:52
7楼: 换串口的方法我试了,还是不行。
----------------------------------------------
-
作者:
男 chinadjt (天狼星) ★☆☆☆☆ -
普通会员
2004/2/27 12:43:10
8楼: 请将此保持在论坛首页。我急等待回复。
----------------------------------------------
-
作者:
男 chinadjt (天狼星) ★☆☆☆☆ -
普通会员
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;
但程序运行到这段程序中时就报告发送失败。我想应该是发送缓存的问题吧,如何解决?
----------------------------------------------
-
作者:
男 zhouyf001 (zhou) ★☆☆☆☆ -
盒子活跃会员
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”

----------------------------------------------
-
作者:
男 bjdribllec ( ) ★☆☆☆☆ -
盒子活跃会员
2004/3/1 17:08:17
11楼: var sbuf:array [0..5] of char; 
fcomm.comm1.writecommdata(sbuf,6);

----------------------------------------------
-
作者:
男 gigi_hcl (蓝海雨) ★☆☆☆☆ -
普通会员
2004/3/1 17:24:25
12楼: 我在Win2003 Server下也用这个控件做了一个串口的小程序,很小,不好意思拿出来;要的话,联系QQ:241268990,我现在下班,晚上7点半找我吧!!
----------------------------------------------
生命中,不断地有人离开或进入。于是,看见的,看不见的;记住的,遗忘了。 生命中,不断地有得到和失落。于是,看不见的,看见了;遗忘的,记住了。 然而,看不见的,是不是就等于不存在?记住的,是不是永远不会消失? 
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行109.375毫秒 RSS