AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Virtueller COM Port CP210x: Problem unter Win8.1
Thema durchsuchen
Ansicht
Themen-Optionen

Virtueller COM Port CP210x: Problem unter Win8.1

Ein Thema von Rollo62 · begonnen am 22. Jul 2015 · letzter Beitrag vom 23. Jul 2015
 
Rollo62

Registriert seit: 15. Mär 2007
4.241 Beiträge
 
Delphi 12 Athens
 
#3

AW: Virtueller COM Port CP210x: Problem unter Win8.1

  Alt 23. Jul 2015, 07:30
danke für den Tip.
ComPort hatte ich mir vor Jahren schonmal angeschaut, werde ich mir auf jeden Fall mal in der aktuellen Version ansehen.

Ich glaube ich habe schon ein mögliches Problem gefunden, es gibt einen dieser vergessenen CompilerSchalter
Code:
{$IFDEF VER200} {$DEFINE NEWDELPHI} {$ENDIF}  { BDS 2009 }
//S4: Added
{$IF CompilerVersion >= 20.0} {$DEFINE NEWDELPHI} {$ENDIF}  { XE+ }  // Added
{$IFDEF FPC}    {$MODE DELPHI}      {$ENDIF}  { Lazarus }
Der war aber schon vorher hart auf NEWDELHPI gesetzt, deshalb hat es vorher auch schon funktioniert.

Das wird dann hier so eingesetzt:
Code:
  {$IFDEF NEWDELPHI}
  c : array[0..63] of WideChar; // <-- hier kommt er vorbei
  {$ELSE}
  c : array[0..63] of char;
  {$ENDIF}
Jedenfalls ann alle die auch noch die Toolbox Serial-Library im Einsatz haben:
- Mal nach NEWDELPHI schauen



!! Trotzdem funktioniert es noch nicht (genausowenig wie in AsyncPro).
Das Problem scheint tiefer zu liegen, denn CreateFile() lässt sich einfach nicht verbinden.
Der COM-Port ist sichtbar und OK im GeräteManager.

Ich habe ja XE8 im Verdacht, weil ich da schon andere Seltsamkeiten gesehen habe.

Hat sie vielleicht etwas an CreateFile geändert ?

Die XE8 Defines sind bei mir so definiert:
Code:
  GENERIC_READ            = DWORD($80000000);
  {$EXTERNALSYM GENERIC_READ}
  GENERIC_WRITE           = $40000000;
  {$EXTERNALSYM GENERIC_WRITE}

  OPEN_EXISTING = 3;
  {$EXTERNALSYM OPEN_EXISTING}

  FILE_ATTRIBUTE_NORMAL              = $00000080;
  {$EXTERNALSYM FILE_ATTRIBUTE_NORMAL}

  FILE_FLAG_OVERLAPPED = $40000000;
  {$EXTERNALSYM FILE_FLAG_OVERLAPPED}

{$IFDEF MSWINDOWS}
  FixedInt = LongInt;
  FixedUInt = LongWord;
{$ENDIF}
{$IFDEF POSIX}
  FixedInt = Integer;
  FixedUInt = Cardinal;
{$ENDIF}


  DWORD = FixedUInt;
  {$EXTERNALSYM DWORD}

  DWORD = System.Types.DWORD;
  {$EXTERNALSYM DWORD}
Da sehe ich auch keine Fehler.

Übrigens scheint die ComPort-Komponente das gleiche zu machen:
Da sehe ich prinzipiell keinen Unterschied bei allen drei Lösungen, sondern eher bei CreateFile selbst.

Code:
// create handle to serial port
procedure TCustomComPort.CreateHandle;
begin
  FHandle := CreateFile(
    PChar('\\.\' + FPort),
    GENERIC_READ or GENERIC_WRITE,
    0,
    nil,
    OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,
    0);

  if FHandle = INVALID_HANDLE_VALUE then
    //raise EComPort.Create
    CallException(CError_OpenFailed, GetLastError);
end;

Rollo
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz