关于口串口用API用HEX进制发送时不过滤0x00 ( 积分: 100 )

  • 主题发起人 主题发起人 山高月晓
  • 开始时间 开始时间

山高月晓

Unregistered / Unconfirmed
GUEST, unregistred user!
在用DELPHI 7 编串口程序时,用API,而不是MSCOMM,SPCOMM 时,怎么设置fnull.
怎么在DELPHI ,DCB没有这个参数。而VC里却有~~~
所以使得0x00收不到~~~
 
在用DELPHI 7 编串口程序时,用API,而不是MSCOMM,SPCOMM 时,怎么设置fnull.
怎么在DELPHI ,DCB没有这个参数。而VC里却有~~~
所以使得0x00收不到~~~
 
没人回复吗?!
 
再提一下~
 
//---------------------------------------------------------------------
//这是我以前写的一个初始化串口函数,不知道对你有没有帮助
//---------------------------------------------------------------------
function TMainForm.InitCommPort(iPortNo:Integer):Boolean ;
var commName:String ;
lpdcb:TDCB;
rCommTimeouts:COMMTIMEOUTS;
begin
result:=false ;
CloseHandle(ahCom[iPortNo]);
try
commName:=format('Com%d',[iPortNo]) ;
ahCom[iPortNo]:=CreateFile(pAnsiChar(commName),generic_read or
generic_write,0,nil,open_existing,
file_attribute_normal,0);//´ò¿ª´®ÐпÚ
if ahCom[iPortNo]=invalid_handle_value then
begin
// ShowMessage('²»ÄÜ´ò¿ª'+String(sComName));
CloseHandle(ahCom[iPortNo]);
exit;
end;
bSuccessFlag:=SetupComm(ahCom[iPortNo],4096,4096); //ÉèÖÃCOMÊäÈ룬Êä³ö»º³åÇø
if not bSuccessFlag then
begin
// ShowMessage('²»ÄÜÉèÖÃ'+String(sComName));
CloseHandle(ahCom[iPortNo]);
exit;
end;
bSuccessFlag:=GetCommState(ahCom[iPortNo],lpdcb); //»ñÈ¡DCBµ±Ç°Ä¬ÈÏÉèÖÃ
if not bSuccessFlag then
begin
// ShowMessage('²»ÄÜ»ñµÃDCB²ÎÊý!');
CloseHandle(ahCom[iPortNo]);
exit;
end;
lpdcb.baudrate:=btl;
lpdcb.ByteSize:=zjs;
lpdcb.Parity:=NoParity;
lpdcb.StopBits:=OneStopBit;
bSuccessFlag:=SetCommState(ahCom[iPortNo],lpdcb); //ÓÃDCB²ÎÊýÌî³äDCB
if not bSuccessFlag then
begin
// ShowMessage('²»ÄÜÉèÖÃDCB!');
CloseHandle(ahCom[iPortNo]);
exit;
end;
PurgeComm(ahCom[iPortNo],PURGE_RXCLEAR or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_TXABORT);//Çå¿Õ´®¿Ú»º³åÇøËùÓÐÊý¾Ý
ClearCommError(ahCom[iPortNo], lpError, lpStat);
with rCommTimeouts do
begin
ReadIntervalTimeout:=0;
ReadTotalTimeoutMultiplier:=0;
ReadTotalTimeoutConstant:=250; //¶Á³¬Ê±Îª0.25Ãë
WriteTotalTimeoutMultiplier:=0;
WriteTotalTimeoutConstant:=250; ////д³¬Ê±Îª0.25Ãë
end;

SetCommTimeouts(ahCom[iPortNo], rCommTimeouts);
abComInitFlag[iPortNo] := True;
Result:=true;
except
Application.MessageBox(PAnsiChar('³õʼ»¯´®¿ÚCOM' + intToStr(iPortNo) + 'ʧ°Ü!'),'Ìáʾ', MB_OK + MB_ICONWARNING);
end;
end ;
 
不行呀~~~
 
spcomm.pas本身就是一个很好例子
 
不知道从哪里看起呀~~~

提示一下好吗?
 
555~~~帮帮忙呀。

十六进制接收,怎么设置才能遇到0x00 不当结束符~
 
设置dcb里面的flags,可以看看spcomm的代码,有个属性,
 
我想知道一下如何用api实现十六进制的数据收发。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部