| 

.NET C# Java Javascript Exception

4
Hallo,

bin grade am Debuggen eines Delphi 2010 Projektes.
Ich habe eine Interface-Variable welche Properties besitzt.

type
ITest = interface
function GetX: String;
property X: String read GetX;
end;

TTest = class(TInterfacedObject, ITest)
private
FX: String;

function GetX: String;
end;

function TTest.GetX: String;
begin
Result := FX;
end;

Wie kann ich die Properties dieses interfaces am leichtesten anschauen???
Ich hätte gerne eine Darstellung wie die Objektvariable.
Das Property im Watch-Window manuell eingeben ist auch lästig, besonders wenn das interface 10 properties hat...

So sieht es bei mir aus:



Für eine Info wäre ich dankbar!
26.07.2011
haide 41 2
Habs mal ausprobiert, kenne auch keine andere Möglichkeit
Nicolai Schönberg 24.08.2011
Auf die Beantwortung dieser Frage war ein Kopfgeld in Höhe von 100 Reputationspunkten ausgesetzt. Das Kopfgeld wurde bereits vergeben.
1 Antwort
0
sooooo, nach nem halben Jahr hab ich ne (nicht ganz so bequeme) Möglichkeit gefunden!

Das Problem ist, dass die Funktion zum casten von Interface => Klasse vom Linker entfernt wird, wenn das nirgends im Code gemacht wird.

Daher brauchen wir erst mal ne kleine Dummy-Funktion die das macht.

Man muss die Funktion aber irgendwo aufrufen, ansonsten wird diese natürlich wieder vom Linker entfernt. Eine passende Stelle wäre z.B. FormCreate des Hauptformulars.

Im Debugger kann man dann bei den Überwachten Ausdrücken den cast eingeben (z.B. "TTest(interface_pointer)") und sieht dann die Elemente der darunterliegenden Klasse.

procedure CallIntfCast;
var
i: ITest;
t: TTest;
begin
t := TTest.Create;
i := t;

// sicherheitshalber was mit den Variablen machen,
// nicht dass der Optimizer die gesamte Funktion "wegoptimiert"
if TTest(i) <> t then
raise Exception.Create('WTF?');
end;
14.03.2012
haide 41 2

Stelle deine Interface-Frage jetzt!