Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#18

Re: Hat Delphi Probleme mit static Variablen?

  Alt 2. Nov 2003, 18:48
Hey Frank,

Delphi hat keine Probleme bei Namensgleichheit von Identifiern. Es gilt lediglich den Scope und Namespace (ab D7) korrekt zu verwenden. Du kannst mithilfe des Debuggers der Delphi-IDE leicht überprüfen, ob zwei (einfache) Variablen identisch sind, also den selben Speicherplatz einnehmen, indem Du ihre Adressen auf Gleichheit überprüfst. Der integrierte Debugger und die Watch List (Strg+Alt+W) eignen sich zur Laufzeit prima, wenn Du Ausdrücke der Art @myVar auswerten lässt (in der IDE Strg+F5).

In diesem Beispiel:
Delphi-Quellcode:
{$J+}
procedure StaticVar42;
const
  myVar : Integer = 42;
begin
  Inc(myVar);
end;

procedure StaticVar137;
const
  myVar : Integer = 137;
begin
  Inc(myVar);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Test42;
  Test137;
end;
ergibt der Ausdruck @myVar innerhalb von StaticVar42 zB den Wert @myVar:$44EBC0 und innerhalb von StaticVar127 den Wert @myVar:$44EBC4. Die beiden zuweisbaren Konstanten (assignable typed constants) nehmen also nicht den selben Speicherplaz ein und sind folglich nicht identisch.

Du kannst den integrierten Debugger nun mithilfe der ermittelten Adresse verwenden, um den Inhalt der beiden Variablen auch "von außerhalb" abzufragen, indem Du die Ausdrücke PInteger($44EBC0)^ bzw. PInteger($44EBC0)^ abfragst.

Tatsächlich handelt es sich bei zuweisbaren Konstanten immer (egal ob Methode, lokale Prozedur oder global) um Variablen im Datensegment, sie sind daher auch außerhalb der Prozedur/Methode gültig (Rückgabe von Pointern auf dieser Konstanten sind zulässig) und werden von allen Threads gemeinsam verwendet. Ein
static threadvar myVar = 123; oder
threadconst myVar = 123; gibt es leider nicht ;(

HTH
gruß, choose
  Mit Zitat antworten Zitat