Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

GetWindowLongPtr Result NIL

  Alt 25. Aug 2018, 05:17
Subclassing erstellen mit 32BIT Anwendung kein Problem diese Funktion liefert immer einen gültigen Pointer.
Delphi-Quellcode:
function DialogNotifyProc(WinHandle: HWND; Msg: UINT; wp: WPARAM; lp: LPARAM): LRESULT; stdcall;
//...
DlgHandle := GetParent(WinHandle);
//...
FPrevDlgProc := Pointer(GetWindowLongPtr(DlgHandle, DWL_DLGPROC));
SetWindowLongPtr(DlgHandle, DWL_DLGPROC, LONG_PTR(@DlgProc));
Das Handle ist gültig.
Aber nicht mit 64Bit. Pointer ist NIL das verstehe wer will.

ZITAT:
Zitat:
Ersetzen Sie SetWindowLong/GetWindowLog durch SetWindowLongPtr/GetWindowLongPtr für GWLP_HINSTANCE, GWLP_ID, GWLP_USERDATA, GWLP_HWNDPARENT und GWLP_WNDPROC, da sie Zeiger und Handles zurückgeben. Zeiger, die an SetWindowLongPtr übergeben werden, sollten in den Typ LONG_PTR und nicht in Integer/Longint umgewandelt werden.

Richtig:
SetWindowLongPtr(hWnd, GWLP_WNDPROC, LONG_PTR(@MyWindowProc));
Falsch:
SetWindowLong(hWnd, GWL_WNDPROC, Longint(@MyWindowProc));
gruss

Geändert von EWeiss (25. Aug 2018 um 05:25 Uhr)
  Mit Zitat antworten Zitat