分辨 只需更新Windows 10,问题就会消失
我有一个用Delphi 7开发的旧程序,并使用TComPort进行串行通信。
在Windows 10上,TComPort错误地枚举端口,它不会返回端口号。
该程序从windows xp到windows 8.1 u1
完美运行因此,Windows 10和TComPort之间存在不兼容性,设置兼容性,或者以管理员身份运行程序不会改变任何内容。
我该如何解决? 我必须使用另一个库进行串行通信吗?
这是我已经完成的测试
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CPort;
type
TForm1 = class(TForm)
ComPort1: TComPort;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var List:TStringList;
sPortName:String;
I:integer;
begin
List := TStringList.Create;
try
EnumComPorts( List );
For I := 0 to List.Count-1 do
begin
sPortName := Trim(List[I]);
Memo1.Lines.Add(sPortName);
end;
finally
List.Free;
end;
end;
end.
这是结果
字符串" sPortName"是3个字符。
答案 0 :(得分:0)
过去我遇到过TComPort返回端口名称的问题。对于我来说,TComPort在Windows 10中运行正常。我发现有必要在每个返回的端口名称上使用Trim(),因为#0字符可以在端口名称的末尾返回。您没有提供任何有用的调试信息,但这可能会导致您的问题。解决方案很简单。我这样做:
List := TStringList.Create;
try
EnumComPorts( List );
For I := 0 to List.Count-1 do
begin
sPortName := Trim(List[I]);
<<< do something with sPortName >>>
end;
finally
List.Free;
end;