AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi D11.2 64Bit inaccessible value (gelöst)
Thema durchsuchen
Ansicht
Themen-Optionen

D11.2 64Bit inaccessible value (gelöst)

Ein Thema von venice2 · begonnen am 9. Sep 2022 · letzter Beitrag vom 9. Sep 2022
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

D11.2 64Bit inaccessible value (gelöst)

  Alt 9. Sep 2022, 02:12
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;

Geändert von venice2 ( 9. Sep 2022 um 04:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: D11.2 64Bit inaccessible value

  Alt 9. Sep 2022, 02:36
Versuche mal 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:
hat auch 64Bit funktioniert
dann hattest zu viel du Glück, aber irgendwann ist es zuende.


lPixel := p32 + X; (falls niemand die Pointer-Arithmetic deaktiviert hat )


Wo ist K definiert?


Was macht MakeColor? Und ich seh da ein 0 ... Ist dann and $FFFFFF wirklich nötig?
Delphi-Referenz durchsuchenRGB
$2B or not $2B

Geändert von himitsu ( 9. Sep 2022 um 02:39 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: D11.2 64Bit inaccessible value

  Alt 9. Sep 2022, 02:55
var lPixel := PRGBQuad(integer(p32) + X * sizeof(cardinal)); Macht keinen unterschied.
lPixel.rgbGreen ebenso wenig.

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));

Geändert von venice2 ( 9. Sep 2022 um 04:21 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz