Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem beim kopieren von Pointerinhalten (https://www.delphipraxis.net/22683-problem-beim-kopieren-von-pointerinhalten.html)

Wusel 21. Mai 2004 13:49


Problem beim kopieren von Pointerinhalten
 
Aloha an alle :hi:
ich hab da ein kleines Problem beim kopieren von Pointerinhalten :|

Hier erstmal der Codeausschnitt
Delphi-Quellcode:
type
  TWSIconImage = packed record
    pbmpHeader : PBitmapInfo;
    pImg : Pointer;
  end;

procedure ...
var pHeaderDest : PBitmapInfoHeader;
    fWSIconImgXOr : TWSIconImage;
    ...;
begin
  ...
  Move(pHeaderDest, fWSIconImgXOr.pbmpHeader, SizeOf(pHeaderDest));
  ...
end;
In dem obigen Beispiel kopiert es ja nur die Zeigeradressen und somit sind Änderungen in pHeaderDest auch wirksam auf fWSIconImgXOr.pbmpHeader
Bei
Delphi-Quellcode:
Move(pHeaderDest^, fWSIconImgXOr.pbmpHeader^, SizeOf(pHeaderDest^));
bekomm ich 'ne Exception.

Gibt es eine Möglichkeit, dass ich wirklich nur den Inhalt des Pointers übergebe und nicht die Adresse?
Wäre wirklich sehr dankbar für eure Hilfe, aber manchmal hat man irgendwie ein Brett vorm Kopf :wall:


Wusel

Chewie 21. Mai 2004 13:57

Re: Problem beim kopieren von Pointerinhalten
 
Was hast du denn vor? Move verlangt ja einen Zeiger auf den speicherbereich, der verschoben werden soll. Durch das derefenzieren lieferst du den Inhalt an der Stelle, auf die deine Zeigervariable zeigt. Die Funktion Move interpretiert dies aber als Adresse!

Wusel 21. Mai 2004 14:28

Re: Problem beim kopieren von Pointerinhalten
 
Achso, das habe ich nicht gewusst denn in der Hilfe steht nicht dass es nur Zeiger sein dürfen.
Ich hab jetzt erstmal den kleinen Fehler behoben, dass ich auch PBitmapInfo an PBitmapInfo übergebe und nicht PBitmapInfoHeader an PBitmapInfo
Delphi-Quellcode:
type
  TWSIconImage = packed record
    pbmpHeader : PBitmapInfo;
    pImg : Pointer;
  end;

procedure ...
var pBmpInfo : PBitmapInfo;
    fWSIconImgXOr : TWSIconImage;
    ...;
begin
  ...
  Move(pBmpInfo, fWSIconImgXOr.pbmpHeader, SizeOf(pBmpInfo));
  ...
end;
Ich will halt, dass fWSIconImgXOr.pbmpHeader nur eine Kopie von pBmpInfo ist, ohne dass sich Änderungen in dem einen auf den anderen auswirken.

Chewie 21. Mai 2004 18:42

Re: Problem beim kopieren von Pointerinhalten
 
Dann wird das aber mit move nix. Damit kopierst du ja Speicherinhalte. Für deine Zwecke dürfte eine einfache Zuweisung von pBmpInfo an fWSIconImgXOr.pbmpHeader reichen.

Wusel 22. Mai 2004 17:43

Re: Problem beim kopieren von Pointerinhalten
 
:wall: :wall: :wall: :wall: :wall:
ich sagte doch manchmal hat man eben ein Brett vorm Kopf
Delphi-Quellcode:
Move(pBmpInfo^, fWSIconImgXOr.pbmpHeader^, ...)
ist schon richtig und funktioniert auch, aber nur wenn man vorher GetMem nicht vergessen hat.

also :arrow: Problem gelöst :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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