嗨,我需要找到串行端口的波特率和其他设置,在网上查看,看起来我应该使用GetCommConfig,这将返回一个 TCommConfig 记录,其中包含我认为是我需要的数据。问题是我写的函数返回了错误的值。
下面的代码看起来可以正常工作,但波特率始终为 1200,在 Windows 设备管理器中查看(并更改端口设置)是错误的。
我试过这样称呼它:
ComPort('com1');
ComPort('COM1');
ComPort('COM1:');
ComPort('COM4');
ComPort('COM9');
前 4 个有效但返回 1200,第 5 个无效并返回 0
function ComPort(l_port:String):TCommConfig;
{Gets the comm port settings}
var
ComFile: THandle;
PortName: array[0..80] of Char;
size: cardinal;
CommConfig:TCommConfig;
begin
FillChar(Result, SizeOf(TCommConfig), 0);//blank return value
try
StrPCopy(PortName,l_port);
ComFile := CreateFile(PortName,GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0{ FILE_ATTRIBUTE_NORMAL},0);
try
if (ComFile <> INVALID_HANDLE_VALUE) then
begin
FillChar(CommConfig, SizeOf(TCommConfig), 0);//blank record
CommConfig.dwSize := sizeof(TCommConfig);//set size
//CommConfig.dcb.DCBlength := SizeOf(_dcb);
size := sizeof(TCommConfig);
if (GetCommConfig(ComFile,CommConfig,size)) then
begin
Result := CommConfig;
end;
end;
finally
CloseHandle(ComFile);
end;
except
Showmessage('Unable to open port ' + l_port);
end;
end;
单步执行代码,前 4 个总是命中Result := CommConfig; ,所以 GetCommConfig 正在重新调整有效代码,所以我一定遗漏了一些东西。
我尝试了其他一些事情,例如设置 dcb 记录的长度,但结果都相同,波特率为 1200。
有谁知道我哪里出错了?