CPort无法正常使用Windows 10

时间:2015-11-13 11:01:06

标签: delphi delphi-7 windows-10 tcomport

分辨 只需更新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.

这是结果

Output

字符串" sPortName"是3个字符。

1 个答案:

答案 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;