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
Benutzerbild von himitsu
himitsu

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

AW: D11.2 64Bit inaccessible value

  Alt 9. Sep 2022, 01: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
Ein Therapeut entspricht 1024 Gigapeut.

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

n/a Beiträge
 
#2

AW: D11.2 64Bit inaccessible value

  Alt 9. Sep 2022, 01: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 03: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 18:16 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