Speicher-Fehler beim create
Hallo Zusammen,
ich versuche mich ganz vorsichtige an Scriptern. Ich habe jetzt folgende Unit geschrieben und frage mich, warum es kracht...
Delphi-Quellcode:
Fehlermeldung:
Unit TScripterUnit;
interface uses Windows, Messages, SysUtils, Variants, Printers, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScrMemo, ScrmPS, atScript, atPascal, Vcl.ScripterInit; Type TEvent = procedure(Sender: TObject) of object; TMyScripter=class strict protected FScript_Memo_Set: TatCustomScripter; private public constructor create; procedure Script_Memo_Ausbuchen_Set (Memo: TMemo; Pfad_SetFile: string); end; var Script: TMyScripter; implementation constructor TMyScripter.create; begin FScript_Memo_Set:=TatCustomScripter.Create(nil); //Hier kracht es end; procedure TMyScripter.Script_Memo_Ausbuchen_Set(Memo: TMemo; Pfad_SetFile: string); var Code_Memo: TMemo; begin Code_Memo:=TMemo.Create(nil); Code_Memo.Lines.LoadFromFile(Pfad_SetFile); FScript_Memo_Set.AddComponent(Memo); FScript_Memo_Set.SourceCode := Code_Memo.Lines; FScript_Memo_Set.Execute; end; initialization Script := TMyScripter.Create; finalization if Script <> nil then begin Script.Free; end; end.
Delphi-Quellcode:
Erste Gelegenheit für Exception bei $004076E3. Exception-Klasse $C0000005 mit Meldung 'access violation at 0x004076e3: read of address 0xfffffff4'. Prozess iVisitor.exe (6560)
Hat jemand eine Idee, was ich gerade falsch mache? Vielen Dank Patrick |
AW: Speicher-Fehler beim create
was passiert denn in TatCustomScripter.Create(nil);? vSchon mal mit dem Debugger durch gesteppt?
|
AW: Speicher-Fehler beim create
Das habe ich versucht: Haltepunkt eingefügt und dann mit F7 weitergegangen - der Fehler tritt sofort auf - beim ersten Mal F7 drücken...
|
AW: Speicher-Fehler beim create
Wenn es in einer Zeile "kracht", muss nicht unbedingt diese eine Zeile dafür verantwortlich sein. Manchmal ist es die Zeile davor. Nur hat dieses Konstrukt aber nur eine Zeile. Warum nur eine?
Was passiert eigentlich wenn du davor inherited an die erste Stelle einfügst? Halte ich jetzt nicht für das Problem, sollte aber auf jeden Fall rein. Schon aus Prinzip. |
AW: Speicher-Fehler beim create
Da ich TMS nicht habe und mir auch in naher Zukunft sicher nicht zulegen will, kann ich dir jetzt nicht genau sagen, was da kracht. Aber es muss an dem Konstruktor, bzw. wahrscheinlich eher man Parameter liegen. Wie heißt das Parameter denn, und was wird damit im Konstruktor dann gemacht?
|
AW: Speicher-Fehler beim create
Das hat leider keinen Effekt. Ich bekomme noch die Info, dass es eine ungültige Zeigeroperation.
Der Constructor bekommt später noch mehr Zeilen. Vielen Dank Patrick |
AW: Speicher-Fehler beim create
Also ich würde in solchem Fall versuchen das Problem einzugrenzen, und vielleicht sowas schreiben
Delphi-Quellcode:
Wenn er in nun in der Zeile davor hängen bleibt, ist das Problem vor dem Gleichzeichen, sonst dahinter. Nur eine Idee.
constructor TMyScripter.create;
begin inherited; FScript_Memo_Set:=nil; FScript_Memo_Set:=TatCustomScripter.Create(nil); //Hier kracht es end; Und nur mal als Frage, welche Parameter erwartet TatCustomScripter.Create eigentlich? Kann man das ausnilen? |
AW: Speicher-Fehler beim create
Hmm..
TatCustomScripter schein eine 'Custom' Komponente zu sein. Vielleicht kann man den nicht direkt verwenden, wie z.B. auch TStrings nicht direkt verwendet werden kann, sondern eine davon abgeleitete Class wie TStringList.. Wenn TatCustomScripter eine visuelle Komponente ist, kann es auch sein, das diese einen Owner benötigt, welcher auch gleich als Parent eingetragen wird. Nur bei nil ist da halt keiner. Anscheinend wird anschließend auf diesen zugegriffen und dann knallt es.. (Alles nur Vermutung, da ich die Kompos nicht habe...) |
AW: Speicher-Fehler beim create
Versuche mal ohne diesen initialization/finalization-Horror sondern die globale Variable einfach bei einem Button-Klick oder sonst was zu befüllen.
|
AW: Speicher-Fehler beim create
Ich vermute auch mal, dass das Problem der fehlende Owner ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz