API串口通讯设置lpdcb:Tdcb,setcommstate后,lpdcb的值为自己设定的还是随机的?(20分)

  • 主题发起人 主题发起人 liang1chao
  • 开始时间 开始时间
L

liang1chao

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tform1.comminitialize; // 串 行 口 初 始 化
var
lpdcb:Tdcb;
Ini: TIniFile;
com: string;
Begin
hCom := CreateFile(Pchar(ComboBox1.Text), generic_read or
generic_write, 0, nil, open_existing,
file_attribute_normal or
file_flag_overlapped, 0); // 打 开 串行 口
if hcom=invalid_handle_value then
begin
Ini.Free;
Exit;
end;

Opened := True;
setupcomm(hcom,4096,4096); // 设 置 输 入, 输 出 缓 冲区 皆 为4096 字 节
getcommstate(hcom,lpdcb); // 获 取 串 行 口 当 前 默 认设 置
lpdcb.baudrate:=19200;
lpdcb.StopBits:=1;
lpdcb.ByteSize:=8;
lpdcb.Parity:=NoParity;
Setcommstate(hcom,lpdcb);
setcommMask(hcom,ev_rxchar);
// 指 定 串 行 口 事 件 为 接 收 到 字 符;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
lpdcb: Tdcb;
Ini: TIniFile;
com: string;
begin
if Opened then
Exit;
Ini := TIniFile.Create(apppath + 'config.ini');

// com:=Ini.ReadString('HW','Port','');
// IF com='' Then
Com := ComboBox1.Text;
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(COM);
comminitialize;
shezhi:=setcommstate(hcom,lpdcb);//???就是这里的lpdcb的值,我跟踪的时候就又变乱了,正常么,为什么??
if shezhi=true then
memo1.lines.add('端口打开完成')
else memo1.lines.add('端口打开完成');

Ini.WriteString('HW', 'PORT', ComboBox1.Text);
Ini.Free;
//SendCMD('AT+VCID=1');
SendCMD('AT+CLIP=1');
end;
 
当然是自己设定了,也就是你打开后的那个!
 
那要是没有写进去的话,就是Setcommstate失败,那lpdcb就是随机的了?
 
to liang1chao:
因为你的lpdcb声明为局部变量,只在TForm1.Button1Click过程中生存,未用getcommstate(hcom,lpdcb)获取lpdcb。
解决方法:
1。把lpdcb声明为全局变量
2。在setcommstate前调用getcommstate(hcom,lpdcb)。
 
lpdcb改为全局变量是对的,那能不能帮忙看一下我的另外一个问题,这个问题只是那个问题里面的一个小问题,谢谢!
 
后退
顶部