Entwickler-Ecke

Sonstiges (Delphi) - Gibt es eine Möglichkeit den Stack zu manipulieren?


Nam - Sa 25.11.06 08:32
Titel: Gibt es eine Möglichkeit den Stack zu manipulieren?
Ich rufe mit einem Button Klick eine OnClick Prozedur auf in der ich dann den Button entferne. Auf dem Rückweg sucht er dann anscheinend die Komponenete, die die Prozedur aufgerufen hat. Da sie aber weg ist, kommte eine EAccessViolation Fehlermeldung. Meine Idee ist es nun diesen Aufruf vom Stack zu nehmen.

Kann mir einer der sich auskennt helfen? Wie kann man sowas machen?


thkerkmann - Sa 25.11.06 10:40

Mach ihn doch einfach nur

button.visible:=false;


Narses - Sa 25.11.06 14:55

Moin!

Meinst du nicht, ein Thread zu diesem Problem reicht? Weil dir die Aussagen zur Machbarkeit nicht "passen", brauchst du keinen Neuen, das wird davon auch nicht besser - und "sauberer" auch nicht... <brrr, Komponenten in ihren Ereignissen freigeben...>

cu
Narses


Christian S. - Sa 25.11.06 15:59

Hallo!

Ich habe diesen Thread wieder geöffnet, nachdem der Autor klar gemacht hat, dass es hier nur darum gehen soll, wie man den Stack manipulieren kann. Alternative Lösungen für das ursprüngliche Problem bitte hier posten: http://www.delphi-forum.de/viewtopic.php?t=66894

Christian


BenBE - So 26.11.06 17:52

Innerhalb einer Ereignisbehandlung nie Sender.Free aufrufen. Stattdessen Sender.Release benutzen.


wulfskin - So 26.11.06 18:35

user profile iconBenBE hat folgendes geschrieben:
Innerhalb einer Ereignisbehandlung nie Sender.Free aufrufen. Stattdessen Sender.Release benutzen.
Wo ist den Release definiert?


Christian S. - So 26.11.06 18:40

Ich wiederhole mich nur ungern, aber hier soll es nur um die Sache mit dem Stack gehen. Den Rest bitte in den anderen Thread! :mahn:


BenBE - So 26.11.06 18:49

user profile iconwulfskin hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Innerhalb einer Ereignisbehandlung nie Sender.Free aufrufen. Stattdessen Sender.Release benutzen.
Wo ist den Release definiert?


Siehe http://www.delphi-forum.de/viewtopic.php?p=403004#403004 oder in der DOH ...

Zur Stack-Manipulation:

Delphi-Quelltext
1:
2:
3:
4:
procedure GetStackPointer: Pointer;
asm
    MOV EAX, EBP
end;


Der Rückgabewert dieser Funktion ist ein Pointer auf das StackFrame der aktuellen Prozedur. Enthalten darin ist ein Zeiger auf das StackFrame des Aufrufers und die Rücksprungadresse der aktuellen Routine ... Für mehr Details siehe die Sources der uallCollection oder die des Omorphia Debugging Interface ...