Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Invalid_handle_value (https://www.delphipraxis.net/191601-invalid_handle_value.html)

Alexander I 1. Feb 2017 08:03

Invalid_handle_value
 
Hallo,

ich habe ein Program das ich einmal mit Delphi6 und einmal mit XE5 compiliere.

Es geht um folgende Programmzeilen:
Delphi-Quellcode:
  TCOM = class(TObject)//(TComponent)
  private
    FHandle: Cardinal;
  public
    constructor Create;//(AOwner: TComponent); override;
  end;

implementation

constructor TCOM.Create;//(AOwner: TComponent);
begin
 FHandle := INVALID_HANDLE_VALUE;
//   Min cardinal value = 0
//   Max cardinal value = 4294967295
end;
Bei Delphi6 ist INVALID_HANDLE_VALUE = 4294967295. Hat also den Maximalwert von Cardinal.
In XE5 ist INVALID_HANDLE_VALUE = 18446744073709551615.

Wieso der hohe Wert bei INVALID_HANDLE_VALUE in XE5?

Nach der Übergabe besitzt FHandle den Wert 4294967295 in XE5.

Danke und Gruß.

freimatz 1. Feb 2017 08:05

AW: Invalid_handle_value
 
Hm ...
Ich habe eine Vermutung, aber warum schaust nicht die Deklaration von INVALID_HANDLE_VALUE an

Bernhard Geyer 1. Feb 2017 08:13

AW: Invalid_handle_value
 
Wenn du einen Handle verwendest solltet du THandle als Typ verwenden.

Der schöne Günther 1. Feb 2017 08:19

AW: Invalid_handle_value
 
Gib doch mal 18446744073709551615 bei der Suchmaschine deines Vertrauens ein, vielleicht kommst du dann drauf ;-)

Alexander I 1. Feb 2017 08:56

AW: Invalid_handle_value
 
Ist der Grund der Unterschied der Compilierung auf 32bit und 64bit System?

EWeiss 1. Feb 2017 09:01

AW: Invalid_handle_value
 
Zitat:

Wenn du einen Handle verwendest solltet du THandle als Typ verwenden.
Oder
FHandle : HWND

kommt auf das gleiche raus.

gruss

Der schöne Günther 1. Feb 2017 09:09

AW: Invalid_handle_value
 
Zitat:

Zitat von Alexander I (Beitrag 1360516)
Ist der Grund der Unterschied der Compilierung auf 32bit und 64bit System?

Ganz genau das. Aus genau dem Grund sollte man THandle als Datentyp nehmen. Unter Windows haben Dinge wie ComPort-Handles nicht mehr 32, sondern 64 Bit. Cardinal ist allerdings immer 32 Bit. THandle nicht, das ist entweder 32 oder 64 Bit, je nach Plattform.

Zitat:

Zitat von EWeiss (Beitrag 1360517)
Oder
FHandle : HWND
kommt auf das gleiche raus.

Es gibt keinen einzigen Grund weshalb man ein CreateFile-Handle in ein HWND ablegen sollte.

EWeiss 1. Feb 2017 09:14

AW: Invalid_handle_value
 
Zitat:

Es gibt keinen einzigen Grund weshalb man ein CreateFile-Handle in ein HWND ablegen sollte.
Klar weil es für HWND uninteressant ist ob 32 oder 64 Bit Anwendung.
Ich verwende grundsätzlich kein THandle. (Das ist wieder so ein Delphi Ding.)

Aber du kannst es ja machen wie du willst.
Es sei denn ich habe den Zusammenhang nicht richtig verstanden.. Dann sei's so.

In einem jedoch hast du recht ein ungültiges HWND kann nicht mit INVALID_HANDLE_VALUE verglichen werden.
Dafür wäre dann IsWindow(myHWND) zuständig.

gruss

Alexander I 1. Feb 2017 09:17

AW: Invalid_handle_value
 
Danke.

Zacherl 1. Feb 2017 11:43

AW: Invalid_handle_value
 
Zitat:

Zitat von EWeiss (Beitrag 1360520)
Zitat:

Es gibt keinen einzigen Grund weshalb man ein CreateFile-Handle in ein HWND ablegen sollte.
Klar weil es für HWND uninteressant ist ob 32 oder 64 Bit Anwendung.
Ich verwende grundsätzlich kein THandle. (Das ist wieder so ein Delphi Ding.)

Aber du kannst es ja machen wie du willst.
Es sei denn ich habe den Zusammenhang nicht richtig verstanden.. Dann sei's so.

Von der technischen Seite her macht es tatsächlich keinen Unterschied, ob du
Delphi-Quellcode:
THandle
oder
Delphi-Quellcode:
HWND
verwendest. Semantisch gesehen ist das aber eine andere Sache.
Delphi-Quellcode:
HWND
ist ein von Microsoft definierter Typ, der explizit für Window-Handles vorgesehen ist. MSDN-Library durchsuchenCreateFile liefert aber ein generisches Handle (bzw. ein File-Handle). Hierfür hat MS den Typ
Delphi-Quellcode:
HANDLE
eingeführt, für den es in Delphi den Alias
Delphi-Quellcode:
THandle
gibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz