![]() |
D11.2 64Bit inaccessible value (gelöst)
Seit D11.2 tritt unter 64Bit folgender Fehler auf.
Beim initialisieren von lPixel bekomme ich "inaccessible value" Der selbe Quelltext unter 32Bit funktioniert. Unter D11 hat auch 64Bit funktioniert jetzt plötzlich nicht mehr. Hat vielleicht jemand eine Info was geändert wurde?
Delphi-Quellcode:
procedure TSkinEngine.CreateFormRegion(hParent: HWND; TransColor: COLORREF);
var p32: PByte; lPixel: PRGBQuad; begin // nur relevanter Quelltext des Fehlers p32 := PByte(integer(bm.bmBits) + (bm.bmHeight - 1) * bm.bmWidthBytes); for Y := 0 to bm.bmHeight - 1 do begin X := 0; while X < bm.bmWidth do begin M := X; lPixel := PRGBQuad(integer(p32) + X * sizeof(cardinal)); while X < bm.bmWidth do begin try" K := MakeColor(0, lPixel^.rgbRed, lPixel^.rgbGreen, lPixel^.rgbBlue) and $FFFFFF; // Fehler "lPixel^.rgbRed" usw. inaccessible value except K := 0; end; |
AW: D11.2 64Bit inaccessible value
Versuche mal
Delphi-Quellcode:
lPixel.rgbGreen
Delphi hat hier standardmäßig eine implizite Dereferenzierung, wenn man auf ein Feld oder Methode eines Record-Pointers zugreift. Vielleicht funktioniert es mit dem Standard-Verhalten besser, als wenn du es explizit/selber dereferenzierst. oder
Delphi-Quellcode:
var
p32: PByte; //lPixel: PRGBQuad; begin ... while X < bm.bmWidth do begin M := X; var lPixel := PRGBQuad(integer(p32) + X * sizeof(cardinal)); while X < bm.bmWidth do Ach ja, wenn dein Code mal knallt, weil du Integer(p32) anstatt NativeInt(p32) oder IntPtr(p32) machst, dann zurecht. (ebenso bei integer(bm.bmBits) ) Zitat:
Delphi-Quellcode:
(falls niemand die Pointer-Arithmetic deaktiviert hat :stupid:)
lPixel := p32 + X;
Wo ist K definiert? Was macht MakeColor? Und ich seh da ein
Delphi-Quellcode:
... Ist dann
0
Delphi-Quellcode:
wirklich nötig?
and $FFFFFF
![]() |
AW: D11.2 64Bit inaccessible value
Delphi-Quellcode:
Macht keinen unterschied.
var lPixel := PRGBQuad(integer(p32) + X * sizeof(cardinal));
Delphi-Quellcode:
ebenso wenig.
lPixel.rgbGreen
Es bleibt bei "inaccessible value" Dein Hinweis mit bm.bmBits hat mich auf die Lösung gebracht. Danke!
Delphi-Quellcode:
p32 := PByte(Long_PTR(bm.bmBits) + (bm.bmHeight - 1) * bm.bmWidthBytes);
lPixel := PRGBQuad(Long_PTR(p32) + X * sizeof(cardinal)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz