如何将字符串CBR_115200转换成相应的cardinal值,正确的赋给DCB中的baudrate参数?将串口的配置参数保存到ini文件中了,读出来的BaudRade参数是字符串类型的,想不出来应该怎样正确的赋给BaudRade了。
解决方案 »
- 如何用代码实现取得局域网中交换机或路由器的状态(在线与否)?
- OLE控件太难看如何改变颜色
- 关于ntohl的问题?
- ADOTable1.Locate出错。
- delphi的痛苦,在线等待,有答就有分,绝对在一个礼拜内结贴!字符串问题!
- 寻票据打印源代码
- 急急!!用SQLOLEDB如何连接数据库
- 急!急!急!sql语句+access数据库相关错误
- 有关数据库的设计
- 求教对Combobox中Items内容的判断方式?
- 开发了一个中文分词服务器(C语言开发+词库+源代码),最大特色可以让javascript来调用!当然也可以让其他任何语言来调用
- 如何在delphi中调用QuickTime播放mp4文件?
[code=INIFile][BoundRate]
CBR_115200=115200[/code]
[code=INIFile][BoundRate]
CBR_115200=115200[/code]
sPort : String;
BaudRate : String;
ByteSize : String;
Parity : String;
StopBits : String;
end;
function OpenScPort(const scOpt : scOptions) : THandle;
var
cc : TCOMMCONFIG;
sTemp : String;
begin Result := CreateFile(PChar(scOpt.sPort),
GENERIC_READ or GENERIC_WRITE,
0, {not shared}
nil,
OPEN_EXISTING,
0, {FILE_ATTRIBUTE_NORMAL}
0 ); if Result = INVALID_HANDLE_VALUE then
begin
sTemp := #10#13 + '无法打开'+ scOpt.sPort + '端口,请确认'+ scOpt.sPort
+ '端口存在,并且没有被其他程序占用!';
MessageBox(Application.Handle, PChar(sTemp), '提示', MB_OK+MB_ICONWARNING+MB_APPLMODAL);
Exit;
end;
GetCommState(Result, cc.dcb);
cc.dcb.BaudRate := Cardinal(scOpt.BaudRate); //-----//
cc.dcb.ByteSize := StrToInt(scOpt.ByteSize);
cc.dcb.Parity := Cardinal(scOpt.Parity);
cc.dcb.StopBits := Cardinal(scOpt.StopBits);
showmessage(inttostr(cc.dcb.StopBits)); //-----// if not SetCommState(Result, cc.dcb) then
begin
sTemp := #10#13 + '设置'+ scOpt.sPort + '端口参数过程中发生错误,程序将无法使用'
+ scOpt.sPort + '端口!';
MessageBox(Application.Handle, PChar(sTemp), '提示', MB_OK+MB_ICONWARNING+MB_APPLMODAL);
Exit;
end; PurgeComm(Result,PURGE_RXCLEAR);end;ini文件内容
[scPulse]
sPort=COM1
BaudRate=CBR_115200
ByteSize=8
Parity=NOPARITY
StopBits=ONESTOPBIT
我将这五个个参数读到scOpt中,如何正确的赋给DCB相应的参数。
http://msdn.microsoft.com/en-us/library/aa363214(VS.85).aspx
CBR_600
600
CBR_57600
57600NOPARITY
0
多谢~~我在单位试了足有20分钟
单位不让上网,查的是MSDN2001的,好像上面没列出来不同的字符串对应的Cardinal值。
你给的网页上给了,我在试试,应该可以了。
BaudRateStr = record
RateInt : Cardinal;
rateStr : String;
end;
const
DCB_BaudRates : array[0..15] of BaudRateStr = ( (RateInt : 0; RateStr : '0'),
(RateInt : CBR_110; RateStr : 'CBR_300'),
(RateInt : CBR_600; RateStr : 'CBR_1200')........
);
这样吧,做个对应关系吧。如果你一定要用那种方式存储
{ Baud rates at which the communication device operates } CBR_110 = 110;
{$EXTERNALSYM CBR_110}
CBR_300 = 300;
{$EXTERNALSYM CBR_300}
CBR_600 = 600;
{$EXTERNALSYM CBR_600}
CBR_1200 = 1200;
{$EXTERNALSYM CBR_1200}
CBR_2400 = 2400;
{$EXTERNALSYM CBR_2400}
CBR_4800 = 4800;
{$EXTERNALSYM CBR_4800}
CBR_9600 = 9600;
{$EXTERNALSYM CBR_9600}
CBR_14400 = 14400;
{$EXTERNALSYM CBR_14400}
CBR_19200 = 19200;
{$EXTERNALSYM CBR_19200}
CBR_38400 = 38400;
{$EXTERNALSYM CBR_38400}
CBR_56000 = 56000;
{$EXTERNALSYM CBR_56000}
CBR_57600 = 57600;
{$EXTERNALSYM CBR_57600}
CBR_115200 = $1C200;
{$EXTERNALSYM CBR_115200}
CBR_128000 = $1F400;
{$EXTERNALSYM CBR_128000}
CBR_256000 = $3E800;
{$EXTERNALSYM CBR_256000} 就这个几个。
我也不知道怎样做才更好。
sPort=COM1
BaudRate=CBR_115200
ByteSize=8
Parity=NOPARITY
StopBits=ONESTOPBIT[BaudRate]
CBR_110=110
CBR_300=300
CBR_600=600
CBR_1200=1200
CBR_2400=2400
CBR_4800=4800
CBR_9600=9600
CBR_14400=14400
CBR_19200=19200
CBR_38400=38400
CBR_56000=56000
CBR_57600=57600
CBR_115200=$1C200
CBR_128000=$1F400
CBR_256000=$3E800[Parity]
NOPARITY=0
ODDPARITY=1
EVENPARITY=2
MARKPARITY=3
SPACEPARITY=4[StopBits]
ONESTOPBIT=0
ONE5STOPBITS=1
TWOSTOPBITS=2[/code]
像这个
ONE5STOPBITS
1我现在能想到的还是将字符串ONE5STOPBITS和Cardinal值1建立对应关系的笨方法。就是怎样建立这两个量之间的关系居然还有点发懵。
郁闷
有时间再找两本基础的书看看
kiven
这个名字看的好熟悉,电子书库是你写的吗?
kiven
这个名字看的好熟悉,电子书库是你写的吗?