Ole Jansen
2017-04-20 13:55:45 UTC
Moin,
In Delphi6 arbeitet ein Programm mit seriellen Schnittstellen.
Von COM1 bis COM9 funktionierte es seit Jahren von Windows NT4
bis Windows10.
Ab COM10 kann das Programm kein Handle auf den Anschluss allokieren.
Der ursprüngliche Code sieht etwa so aus:
var ComPort:string;
ComHandle:THandle;
...
COMPort := 'COM'+IntToStr(port);
...
ComHandle := CreateFile(pchar(COMPort), GENERIC_READ or
GENERIC_WRITE, 0, nil,
OPEN_EXISTING, 0, 0);
Gemäß:
<https://support.microsoft.com/en-us/help/115831/howto-specify-serial-ports-larger-than-com9>
habe ich es so probiert:
COMPort := '\\\\.\\COM'+IntToStr(port);
Damit funktioniert es überhaupt nicht.
Nach etwas Rumprobieren habe ich herausgefunden, dass
COMPort := '\\?\COM'+IntToStr(port);
Funktioniert. Zumindest unter Windows7.
Kann mich jemand aufklären was da los ist?
Viele Grüße und vielen Dank,
O.J.
In Delphi6 arbeitet ein Programm mit seriellen Schnittstellen.
Von COM1 bis COM9 funktionierte es seit Jahren von Windows NT4
bis Windows10.
Ab COM10 kann das Programm kein Handle auf den Anschluss allokieren.
Der ursprüngliche Code sieht etwa so aus:
var ComPort:string;
ComHandle:THandle;
...
COMPort := 'COM'+IntToStr(port);
...
ComHandle := CreateFile(pchar(COMPort), GENERIC_READ or
GENERIC_WRITE, 0, nil,
OPEN_EXISTING, 0, 0);
Gemäß:
<https://support.microsoft.com/en-us/help/115831/howto-specify-serial-ports-larger-than-com9>
habe ich es so probiert:
COMPort := '\\\\.\\COM'+IntToStr(port);
Damit funktioniert es überhaupt nicht.
Nach etwas Rumprobieren habe ich herausgefunden, dass
COMPort := '\\?\COM'+IntToStr(port);
Funktioniert. Zumindest unter Windows7.
Kann mich jemand aufklären was da los ist?
Viele Grüße und vielen Dank,
O.J.