expertenaustausch > comp.lang.* > comp.lang.delphi.misc

Ole Jansen (20.04.2017, 15:55)
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.
Steffen Christgau (20.04.2017, 20:51)
On 20.04.2017 15:55, Ole Jansen wrote:
> habe ich es so probiert:
> COMPort := '\\\\.\\COM'+IntToStr(port);
> Damit funktioniert es überhaupt nicht.


Die MSDN-Doku zeigt dir C-Code. Da muss man den Backslash escapen - mit
einem Backslash. Also ein doppelter Backslash in C entspricht einem in
Delphi.

> Nach etwas Rumprobieren habe ich herausgefunden, dass
> COMPort := '\\?\COM'+IntToStr(port);
> Funktioniert. Zumindest unter Windows7.
> Kann mich jemand aufklären was da los ist?


Gemäß MS-Doku, müsste das aber schon '\\.\' sein, mit Punkte - nicht mit
Fragezeichen:


Die Doku von CreateFile sagt das auch.

Ich hab hier Code, der diese Konvention benutzt, unter Windows XP bis 10
ohne Probleme am laufen.

Gruß, Steffen
Ole Jansen (21.04.2017, 09:54)
Am 20.04.2017 um 20:51 schrieb Steffen Christgau:
> On 20.04.2017 15:55, Ole Jansen wrote:
> Die MSDN-Doku zeigt dir C-Code. Da muss man den Backslash escapen - mit
> einem Backslash. Also ein doppelter Backslash in C entspricht einem in
> Delphi.


Ach stimmt, da war ja was... Brett vorm Kopf ist weg.
(Ich hatte zwischendurch was von UTF8/16 in UNC Pfaden gegoogelt
und war total verwirrt...)

Danke!

O.J.
Ähnliche Themen