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;