Array of PWord beschreiben, geht nicht?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Q.666
Beiträge: 3
Registriert: Fr 21. Jan 2011, 09:31

Array of PWord beschreiben, geht nicht?

Beitrag von Q.666 »

Hallo!

Ich versuche in ein Array of PWord 100 mal die gleiche Adresse zu schreiben.
Auf diese Adresse zeigt bereits der Pointer LPtt.

Problem:
Es wird nichts kopiert, das Array bekommt keine neuen Werte, aber warum?

Code: Alles auswählen

var
LPtArray: Array of PWord;
LPtt: PWord;
i: integer;
begin
  SetLength(LPtArray, 50);
  LPtt := @i; //nur exemplarisch, es funktionierte in Tests mit [u]keiner[/u] Adresse
  for i := 0 to 49 do
  begin
    LPtArray[i] := LPtt;
  end;
end;
Für jede Hilfe wäre ich sehr dankbar!

mfg
Q

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Array of PWord beschreiben, geht nicht?

Beitrag von theo »

Q.666 hat geschrieben: Für jede Hilfe wäre ich sehr dankbar!
Die Antwort dürfte in dem Teil liegen, den du nicht zeigst.
Wie kommst du darauf, dass es nicht geht? Bzw. wie liest du das Ganze aus?

Q.666
Beiträge: 3
Registriert: Fr 21. Jan 2011, 09:31

Re: Array of PWord beschreiben, geht nicht?

Beitrag von Q.666 »

Ich hoffe du hast recht =)
Hier ist der Code:

-ich hab nen record
-eine Imagebox
-einen Pointer auf die Bild-Rohdaten der Imagebox im RAM
-der Pointer soll 100 bzw 50 mal in das Array im record kopiert werden

Code: Alles auswählen

type
  TIMGSet = packed record 
    Width, Height, SliceCount: integer;
    PIMG_Array: Array of PWord;
  end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  LPnt: Pointer;
begin
  FIMGSet.Height:= 100;
  FIMGSet.Width:= 100;
  FIMGSet.SliceCount:= 50;
  SetLength(FIMGSet.PIMG_Array, 50);
  LPnt := Image1.Picture.Pixmap.RawImage.Data;
  for i := 0 to 49 do
  begin
    FIMGSet.PIMG_Array[i] := LPnt;
  end;
end;
Bereits versucht:
var LPnt als PByte oder PWord
damit zusammenhängend PWord(...); und Pointer(...); auch getestet
Move(...); erzielt auch keinen Effekt

In der Watchlist habe ich:
i -> korrekt angezeigt
FIMGSet.PIMG_Array[i-1] -> Werte laufen hübsch durch, also abfrage geht
FIMGSet.PIMG_Array -> aber Werte ändern sich nicht, was das Ziel ist
FIMGSet.PIMG_Array[i+1]
FIMGSet.PIMG_Array[i+2]
LPnt -> korrekt

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Array of PWord beschreiben, geht nicht?

Beitrag von theo »

Nö, bleib bitte bei deinem einfachen Beispiel oben, und vergiss auch mal den Debugger und schreibe mit writeln die Werte raus (um Debuggermacken auszuschliessen)
So kannst du mal deine Aussage relativ einfach überprüfen.

Q.666
Beiträge: 3
Registriert: Fr 21. Jan 2011, 09:31

Re: Array of PWord beschreiben, geht nicht?

Beitrag von Q.666 »

Super, Danke vielmals!

Das wars! Da hat die IDE offenbar den bug.
Wenn ich die Werte vom Code augeben lasse stimmen sie alle.

mfg
Q

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Array of PWord beschreiben, geht nicht?

Beitrag von carli »

Auf den Debugger darfst du eh nicht vertrauen, da der auf GDB aufsetzt und der GDB für C-Sprachen gemacht ist.

Antworten