-1

已解决 只需更新 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 个字符。

4

1 回答 1

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; 
于 2015-11-16T10:52:48.890 回答