Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Speicheradresse eine Pointers, Objektes etc. ausgeben lassen (https://www.delphipraxis.net/41737-speicheradresse-eine-pointers-objektes-etc-ausgeben-lassen.html)

static_cast 7. Mär 2005 20:43


Speicheradresse eine Pointers, Objektes etc. ausgeben lassen
 
Hi,

mal eine frage, ist es möglich mir die Speicheradresse eine Objektes oder Pointers als Intereger ausgeben zu lassen, also das ich weiß wo sich dieses befindet.

Habe das noch nie wiklich in Delphi gemacht oder gebraucht, nur in C/C++ da geht es ja mit dem "&" ganz easy aber wie schaff ich das in Delphi? Ich hab schon die ganze Zeit rumgetestet...


Grüße,
Daniel

alcaeus 7. Mär 2005 20:43

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Das geht auch in Delphi ganz einfach: der Operator dafuer ist @

Greetz
alcaeus

static_cast 7. Mär 2005 20:49

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Ja klar das weiß ich ja aber wie bekomm ich dann die Speicheradresse als Integer?

alcaeus 7. Mär 2005 20:51

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
:wiejetzt:
Einfacher gehts nicht:
Delphi-Quellcode:
ShowMessage(IntToStr(Integer(@Form1)));
Greetz
alcaeus

static_cast 7. Mär 2005 20:54

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Hmm komisch das mach ich doch die ganze Zeit, mein ergebnis ist 0 :gruebel:

alcaeus 7. Mär 2005 20:55

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Zeig mal mehr Code. Evtl. ist das Objekt nicht initialisiert (also nil). Das sollte ebenfalls 0 ergeben

Greetz
alcaeus

static_cast 7. Mär 2005 21:04

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Delphi-Quellcode:
function Init:Integer; stdcall;
var
  S:TStrings;
begin
  S:=TStringList.Create;
  Result:=Integer(@S);
  S.Free;
end;

Luckie 7. Mär 2005 21:06

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Was willst du mit der Adresse von der Stringliste? Und warum ist die Funktion als stdcall deklariert?

Sprint 7. Mär 2005 21:08

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Mach das "@" weg.

static_cast 7. Mär 2005 21:13

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
@Luckie
Das mit der StringListe ist jetzt nur ein einfacher Test, ansonsten ist die Funktion ein Dll Export.

@Sprint
Wenn ich das @ wegnehme mach er erst recht nix, 0.

Luckie 7. Mär 2005 21:16

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TstringList.Create;
  try
    ShowMessage(IntToStr(Integer(@sl)));
  finally
    FreeAndNil(sl);
  end;
end;
Geht wunderbar. Allerdings erhalte ich ohne @ einen anderen Wert.

Sprint 7. Mär 2005 21:20

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Zitat:

Zitat von static_cast
Wenn ich das @ wegnehme mach er erst recht nix, 0.

Dann hast du was falsch gemacht.

Zitat:

Zitat von Luckie
Geht wunderbar. Allerdings erhalte ich ohne @ einen anderen Wert.

Ohne @ ist die Objektreferenz auf TStringList und mit ist die Variable wo die Objektreferenz gespeichert ist.

Sprint 7. Mär 2005 21:21

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
Delphi-Quellcode:
function Test1: Integer;
var
  SL: TStringList;
begin

  SL := TStringList.Create;
  SL.Add('Test');
  Result := Integer(SL);

end;

procedure Test2(I: Integer);
begin

  with TStringList(I) do
  begin
    ShowMessage(Text);
    Free;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  I := Test1;
  Test2(I);
end;

static_cast 7. Mär 2005 21:24

Re: Speicheradresse eine Pointers, Objektes etc. ausgeben la
 
ich habs jetzt mal so probiert

Delphi-Quellcode:
procedure Test;
var
  I:Integer;
  S:TStrings;
begin
  S:=TStringList.Create;
  I:=Integer(S);
  S.Add('1');
  S:=nil;
  S:=TStringList(Pointer(I));
  ShowMessage(S.Text);
  S.Free;
end;
das @ muss auch weg, sonst gibts eine Exception, die MessageBox gibt mir dann auch 1 aus also scheint es zu gehen, egal warum ich bei der Ausgabe vom Integer trozdem eine 0 bekommen, hauptsache es geht :)

Danke euch :thumb:


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