![]() |
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:
Bei Delphi6 ist INVALID_HANDLE_VALUE = 4294967295. Hat also den Maximalwert von Cardinal.
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; 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ß. |
AW: Invalid_handle_value
Hm ...
Ich habe eine Vermutung, aber warum schaust nicht die Deklaration von INVALID_HANDLE_VALUE an |
AW: Invalid_handle_value
Wenn du einen Handle verwendest solltet du THandle als Typ verwenden.
|
AW: Invalid_handle_value
Gib doch mal 18446744073709551615 bei der Suchmaschine deines Vertrauens ein, vielleicht kommst du dann drauf ;-)
|
AW: Invalid_handle_value
Ist der Grund der Unterschied der Compilierung auf 32bit und 64bit System?
|
AW: Invalid_handle_value
Zitat:
FHandle : HWND kommt auf das gleiche raus. gruss |
AW: Invalid_handle_value
Zitat:
Zitat:
|
AW: Invalid_handle_value
Zitat:
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 |
AW: Invalid_handle_value
Danke.
|
AW: Invalid_handle_value
Zitat:
Delphi-Quellcode:
oder
THandle
Delphi-Quellcode:
verwendest. Semantisch gesehen ist das aber eine andere Sache.
HWND
Delphi-Quellcode:
ist ein von Microsoft definierter Typ, der explizit für Window-Handles vorgesehen ist.
HWND
![]()
Delphi-Quellcode:
eingeführt, für den es in Delphi den Alias
HANDLE
Delphi-Quellcode:
gibt.
THandle
|
AW: Invalid_handle_value
Das ist im Endeffekt das gleiche wie als irgendjemand vor 15 Jahren gesagt hat "Von der technischen Seite her macht es tatsächlich keinen Unterschied, ob du
Delphi-Quellcode:
oder
THandle
Delphi-Quellcode:
verwendest." :P
Cardinal
|
AW: Invalid_handle_value
Zitat:
Code:
Macht in diesem Falle also tatsächlich auch in der Zukunft keinen Unterschied, sofern die Definition von HWND beibehalten wird (was aus Gründen der Abwärtskompatibilität sicherlich geschieht).
typedef void *PVOID;
typedef PVOID HANDLE; typedef HANDLE HWND; |
AW: Invalid_handle_value
Zitat:
z.B. könnte HWND in Zukunft 32 Bit bleiben, aber HANDLE könnte man auf 64 Bit ändern. PS: Für SendMessage gibt es eigentlich auch die Typen LPARAM, WPARAM und LRESULT, die Delphi zwar kennt, aber die fast niemand verwendet, noch nichtmal Delphi. :roll: Ein Problem ist auch, das die Codevervollständigung und CodeInsight/HelpInsight den Namen des Basistypen aber nicht des verwendeten "Alias" anzeigen. Außer man definiert etwas explizit nicht als Alias, sondern als neuer (abgeleiteter) Typ. |
AW: Invalid_handle_value
Zitat:
Generell habt ihr natürlich recht, dass man bei Möglichkeit doch bitte den korrekten Typ verwenden sollte. Das wollte ich mit meiner ersten Aussage auch auf gar keinen Fall in Frage stellen. Hier sollte
Delphi-Quellcode:
/
HANDLE
Delphi-Quellcode:
verwendet werden und daran gibt es nichts zu rütteln.
THandle
|
AW: Invalid_handle_value
Zitat:
Aber das noch. Ob ich nun nen Käfer fahre oder einen Aufgemotzten wie vor 15 Jahren bleibt sich gleich. Zumindest was den Typ angeht. happy code :) gruss |
AW: Invalid_handle_value
PS: Viele Fehler bei Programm-Umstellungen ala
32 Bit -> 64 Bit ANSI -> Unicode (vor und ab Delphi 2009) beruhen auf "falschen" Typen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 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 by Thomas Breitkreuz