Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

Pointer in Property schreiben

  Alt 21. Aug 2018, 08:30
Delphi-Quellcode:
procedure TSkinEngine.SetProperty(WinHandle: HWND; Item: integer; V: LONG_PTR);
begin

    if (Item > 0) and (Item < EXTEND_EXTRA + 1) and (WinHandle <> 0) then
      SetWindowLongPtr(WinHandle, (Item - 1) * 4, V);

end;
Unter 32Bit werden mir immer die korrekten Pointer zurückgegeben.

Delphi-Quellcode:
function TSkinEngine.GetProperty(WinHandle: HWND; Item: integer): LONG_PTR;
begin
  Result := 0;

  if (Item > 0) and (Item < EXTEND_EXTRA + 1) and (WinHandle <> 0) then
    Result := GetWindowLongPtr(WinHandle, (Item - 1) * 4);

end;
Delphi-Quellcode:
      ImgTL := Pointer(GetProperty(pHandle, FORM_TopRight));
      if Assigned(ImgTL) then
        GetImageSize(ImgTL, TLW, TLH);
unter 64Bit ist alles irgendwie durcheinander die Pointer stimmen einmal dann wieder nicht.
Ist LONG_PTR für 64Bit nicht das richtige?

Die Daten werden so übergeben.

Delphi-Quellcode:
              stTopRight:
              begin
                Path := FSkinPath(sBF, sSkinPath);
                if FileExists(Path) then
                  SkinEngine.SetProperty(hMain, FORM_TopRight,
                    LONG_PTR(SkinEngine.skCreateImageFromFile(Path)));
              end;
Funktioniert alles in 32Bit in 64Bit jedoch nicht.

pic 1. Der Pointer vom Image
pic 2. konvertiert zu LONG_PTR
pic 3. Die Rückgabe.. komplett falsch

Danach kracht es weil der Pointer falsch ist.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:53 Uhr)
  Mit Zitat antworten Zitat