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
BenBE 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
wulfskin hat folgendes geschrieben: |
BenBE 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 ...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!