Moin Chris,
HWND und DWORD sind beide als LongWord deklariert (siehe auch Windows.pas)
Bei einem 32 Bit Compiler ist hat LongWord die gleiche Bedeutung wie Cardinal.
Alle diese drei Werte entsprechen also, bei einem 32 Bit Compiler, einem 32 Bit Wert ohne Vorzeichen.
Da HWND und DWORD in der Windows
API allerdings üblich sind, werden oft diese verwendet (statt Longword).
Ein wesentlicher Unterschied zu C und Pascal:
Wird da als Typ, z.B., ein HWND vorgegeben bei einer Funktion, dann fängt der C-Compiler i.d.R. an zu meckern, wenn man statt dessen eine Variable vom Typ DWORD angibt, während Delphi das kommentarlos schluckt.
Es wäre zwar schön, wenn auch Delphi hier so stur wäre, so dass man gezielt einen Typecast durchführen müsste (was den Code dann auch besser dokumentieren würde, bzw. wodurch einem auffällt, dass man etwas falsches angibt), aber leider funktioniert die dafür vorgesehene Technik, zumindest unter D5, nicht so recht.
HWND ist so deklariert:
Delphi-Quellcode:
type
HWND = type Longword;
Dieses = type Longword soll eigentlich dafür sorgen, dass ein direkter Austausch von DWORD und HWND Werten nicht ohne Typecast möglich ist, aber das hab' ich so leider bislang nie zum Laufen bekommen. (entweder ich find' nur die Option nicht, oder es geht tatsächlich nicht)
Zum Thema cardinal kannst Du hier übrigens bestimmt weitere Infos finden, wenn Du mal nach "generisch*" suchst.