CPort не работает должным образом с Windows 10

РАЗРЕШЕНОПросто обновите 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 символа.

1 ответ

В прошлом у меня были проблемы с возвратом имен портов в 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; 
Другие вопросы по тегам