Entwickler-Ecke

Windows API - PostMessage-Parameter 'wParam'


schnorchel - Mi 04.09.13 20:04
Titel: PostMessage-Parameter 'wParam'
Hallo,

ich muß ein mit Delphi 7 geschriebenes Programm nach Delphi XE4 portieren.

Problem: Unter D7 können bei PostMessage mittels des wParam-Parameters auch negative Werte übergeben werden, also etwa "PostMessage(Handle,WM_XXX,-100,0)". Unter XE4 dagegen bekomme ich für den negativen Wert beim Kompilieren die Fehlermeldung "subrange out of bounds".

Anscheinend sind jetzt nur noch nicht-negative Zahlen erlaubt. Bitte um erhellendes Wissen... Gibt es vielleicht eine Möglichkeit, dennoch negative Zahlen zu übergeben?


IhopeonlyReader - Mi 04.09.13 21:31

Integer zu Cardinal casten (geht ohne Probleme, da beides 4 Byte groß ist) und beim Empfänger wieder zurück von Cardinal zu Integer..
meineswissens dürfte das so funktionieren.. da gibt es aber nicht nur 4 Byte paare
Hier mal ein Paar Beispiele: Byte: Negative / Positive
1: ShortInt / Byte
2: SmallInt / Word
4: Integer / Cardinal
4: LongInt / LongWord
8: Int64 / UInt64


WasWeißDennIch - Do 05.09.13 08:17

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
Integer zu Cardinal casten

Wieso nicht gleich zu wParam?

Delphi-Quelltext
1:
PostMessage(SomeHandle, SomeMessage, wParam(-100), 0);                    


schnorchel - Do 05.09.13 11:51

Danke für die Antworten, Casten funktioniert bestens.

Was ich eigentlich wissen wollte (und das kommt in meiner Anfrage nicht klar zum Ausdruck), war der Grund für das geschilderte andere Verhalten unter XE4. Wie ich inzwischen weiss, hat Embarcadero mit/ab XE2 die Definition von WPARM von INT_PTR auf UINT_PTR geändert, um der offiziellen Windows-API Definition "typedef UINT_PTR WPARAM" zu entsprechen und damit Problemen im 64-Bit-Bereich aus dem Wege zu gehen.