Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Instanzname innerhalb einer Klasse bekommen


jojo-sp - Fr 09.07.10 16:57
Titel: Instanzname innerhalb einer Klasse bekommen
Moinsen,

ich hätte da mal ne Frage, weil ich wie der Ochs vorm Berge hier stehe (und Schwitze, weil das Büro die Temperatur einer Sauna erreicht hat)...

Ich habe eine Klasse. Innerhalb der Klasse sollen Daten in einer ini Datei gespeichert werden. Dazu möchte ich den Namen der Klasseninstanz verwenden, da mit der selben Klasse mehrere Objekte erzeugt werden.

Ganz grob der Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// Es werden mehrere Objekte aus TMyClass erzeugt
  Class1:= TMyClass.Create;
  Class2:= TMyClass.Create;
  ..

procedure  TMyClass.SaveIni;
begin
  ini.WriteString(<Klassenname>,xyz,ValueString);
end;


Für <Klassenname> möchte ich jetzt Class1 bzw. Class2 wissen. Natürlich kann ich das auch beim Create manuell in ne Variable schreiben, aber warum einfach wenns auch schwer geht...???

Vielleicht ist die Lösung gerade so einfach, dass ich auch nicht drauf komme :-)

Gruß


Hidden - Fr 09.07.10 17:02

Hi,

Ich meine, beim durchblättern der Methoden auch schon die Eigenschaft 'ClassName' gesehen zu haben. Wie sieht das bei dir aus? ;)

E: In der Tat

Delphi-Quelltext
1:
2:
3:
4:
class function TObject.ClassName: string;
begin
  Result := UTF8ToString(PShortString(PPointer(Integer(Self) + vmtClassName)^)^);
end;


lg,


ASMFreak - Fr 09.07.10 17:02

ist nicht der Member ClassName einer Klasse das, was Du brauchts?

Gruß, Trutz


mkinzler - Fr 09.07.10 17:03

Und der Namen der Instanz, so er denn existiert in .Name


jojo-sp - Fr 09.07.10 17:07

Schön wärs ja mit ClassName, aber die gibt mir nur den Namen der Klasse also TMyClass als String zurück und nicht Class1 oder Class2...


Hidden - Fr 09.07.10 17:11

Oh, du wolltest den Namen der Instanz? Das geht definitiv nicht.

Ich würde der Speichern- und der Laden-Methode jeweils einen Parameter verpassen - const aSaveName: String.

lg,


mkinzler - Fr 09.07.10 17:11

Welcher Referenz(variable) du das Objekt zugewiesen hast, kann das Objekt auch nicht wissen


ASMFreak - Fr 09.07.10 17:11

Moment, ich glaube, ich habe Dich missverstanden. Du willst nicht "TMyClass" wissen sondern Class1 und Class2!

Wie soll das gehen? Class1 und Class2 sind bloß zwei Namen für Speicherstellen, an denen die Adressen der Instanzen von TMyClass stehen. Wie soll nun eine Instanz anhand seiner Speicheradresse feststellen, wie der NAme ist, den der Programmierer verwendet hat, um dem Compiler die Adresse mitzuteilen, an der der die Instanz ablegen soll?

Oder hab ich Dich nochmals falsch verstanden?

Gruß, Trutz


jojo-sp - Fr 09.07.10 17:18

@ ASMFreak: Jetzt hast du mich richtig verstanden, aber es wundert mich, dass du das knallen von meiner Hand an der Stirn nicht hören konntest :-) Wieso ich auf die Idee gekommen bin, dass das gehen könnte, weiß ich nicht. :-D


ASMFreak - Fr 09.07.10 17:23

Hab ich doch :wink: