AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi INVALID_HANDLE_VALUE Delphi XE4 32/64bit
Thema durchsuchen
Ansicht
Themen-Optionen

INVALID_HANDLE_VALUE Delphi XE4 32/64bit

Ein Thema von Alex_ITA01 · begonnen am 26. Jun 2013 · letzter Beitrag vom 26. Jun 2013
Antwort Antwort
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

INVALID_HANDLE_VALUE Delphi XE4 32/64bit

  Alt 26. Jun 2013, 14:40
Hallo,
folgendes Beispiel:

Delphi-Quellcode:
procedure TForm4.FormCreate(Sender: TObject);
const
  Handles = 2;
var
  Return : LongWord;
  HandleBuffer : Array[0..1] of THandle;
begin
  Return := MsgWaitForMultipleObjects (Handles, HandleBuffer, False, 2000, QS_ALLINPUT);

  case Return of
    INVALID_HANDLE_VALUE : begin
                             Sleep(0);
                           end;
  end;
end;
Wenn ich das als 32bit compiliere ist alles gut.
Wenn ich das als 64bit compiliere, bekomme ich eine Warnung, dass der untere Konstantenausdruck verletzt wird.
INVALID_HANDLE_VALUE scheint einen unterschiedlichen Wert bei 32/64bit zu haben.
Was kann man an dieser Stelle machen?

MsgWaitForMultipleObjects liefert ja egal ob 32/64 bit immer ein DWord (LongWord) zurück!

Gruß
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: INVALID_HANDLE_VALUE Delphi XE4 32/64bit

  Alt 26. Jun 2013, 14:43
Schau dir doch an wie INVALID_HANDLE_VALUE definiert ist.

Oft ist sowas wie

INVALID_HANDLE_VALUE = -1; zu finden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#3

AW: INVALID_HANDLE_VALUE Delphi XE4 32/64bit

  Alt 26. Jun 2013, 14:55
Es ist leider so, daß die Windows-API an vielen Stellen nicht typsicher ist. Da wird ein z.B. Parameter als unsigned deklariert, in der Dokumentation steht dann aber, daß bei einem Wert von -1 dies oder jenes passiert. Als ordentlicher Delphi-Programmierer schüttelt man da nur noch den Kopf.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: INVALID_HANDLE_VALUE Delphi XE4 32/64bit

  Alt 26. Jun 2013, 14:59
Und genau das ist auch bei einem Handle der Fall, so wie es aussieht: In Delphi ist der Wert für INVALID_HANDLE_VALUE als -1 deklariert. Handles sind unsigned, also ergibt das die höchstmögliche Zahl. Ich habe noch nichts auf 64 Bit kompiliert, aber im Nachhinein wundere ich mich jetzt auch, warum auf 32 Bit keine Warnung kommt...

Nur:
Du nimmst als Datentyp LongWord. LongWord ist Cardinal. Cardinal ist immer 32 Bit.

Ich würde NativeUInt als Typ nehmen...



Nur:
Was willst du eigentlich mit INVALID_HANDLE_VALUE? Das gibt die Funktion doch garnicht her. Sie gibt ein DWORD zurück. Handles sind NativeUInt. Schau doch nochmal in die Doku - Die Funktion gibt überhaupt kein Handle zurück!

Geändert von Der schöne Günther (26. Jun 2013 um 15:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: INVALID_HANDLE_VALUE Delphi XE4 32/64bit

  Alt 26. Jun 2013, 15:08
INVALID_HANDLE_VALUE ist hier schlicht falsch der Dokumentation nach...
Dieser Wert entspricht zwar im Speicher WAIT_FAILED, da -1 so dargestellt wird wie WAIT_FAILED als DWORD 0xFFFFFFFF, aber falsch ist es hier dennoch, da die Dokumentation nur WAIT_FAILED als möglichen Rückgabewert angibt...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#6

AW: INVALID_HANDLE_VALUE Delphi XE4 32/64bit

  Alt 26. Jun 2013, 15:23
In Delphi 2009 war INVALID_HANDLE_VALUE aber noch als DWord(-1) deklariert, deswegen habe ich das früher auch abgefragt, weil es die Funktion auch wiedergeben konnte!

Mich interessiert ja nur, wie man das dann unter XE4 machen soll/te

Gruß
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: INVALID_HANDLE_VALUE Delphi XE4 32/64bit

  Alt 26. Jun 2013, 15:42
Na die MSDN-Beschreibung ist doch gut genug um da die möglichen Return-Values zu erkennen. Ob nun 32-bit oder 64-bit ist doch egal:

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: INVALID_HANDLE_VALUE Delphi XE4 32/64bit

  Alt 26. Jun 2013, 15:58
In Delphi 2009 war INVALID_HANDLE_VALUE aber noch als DWord(-1) deklariert, deswegen habe ich das früher auch abgefragt, weil es die Funktion auch wiedergeben konnte!
Nur weil es rein zufällig der selbe Wert ist wie für WAIT_FAILED heißt das ja nicht, dass es richtig war eine Konstante zu benutzen, die mit dieser API Funktion gar nichts zu tun hat.

Mich interessiert ja nur, wie man das dann unter XE4 machen soll/te
Genauso wie vorher auch, mit der richtigen Konstante. Und das ist nun einmal wie in der Dokumentation zu lesen ist und wie ich schon geschrieben habe WAIT_FAILED, das (laut Dokumentation korrekt) als DWORD($FFFFFFFF) definiert ist.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:50 Uhr.
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