![]() |
Runtime Error 216
Hallo allerseits,
Meine Delphi-Anwendung liefert eine Fehlermeldung: Zitat:
Zitat:
Was sagt mir die Fehler-Adresse? Wie kann ich feststellen, warum der Fehler ausgelöst wird? Ja, noch was: Die Meldung kommt nur dann, wenn im Hintergrund ein Programm für ShutDown läuft, jedoch zu diesem Zeitpunkt keine Aktion auslöst. Wenn ich dieses ShutDown-Programm nicht laufen habe, kommen auch keine Fehlermeldungen von meinem Programm. Starte ich von meiner Anwendung jedoch eine andere (ältere) Version, so funktioniert es auch parallel mit ShutDown. Ein Virus ist ebenfalls keiner auf der Platte. Diese wurde komplett mit dem neuesten Virenscanner Avira AntiVir Personal durchgescannt. Wie kann ich vielleicht auf Grund der Fehler-Adresse herausfinden, was die Ursache ist. mfg Herbert |
Re: Runtime Error 216
Der Fehler tritt auf, nachdem das Delphiprogramm (Application-Object) beendet wurde. Du kannst versuc hen, mit dem integrierten Debugger der IDE den Fehler zu lokalisieren. Stelle die Compiler-Option 'Mit Debug-DCU' in den Projektoptinen ein, setze einen Breakpoint auf die letzte Zeile des Programmquelltextes (auf das 'End.') und beende dein Programm in der IDE.
Dann gehst Du per Einzelschritt vorwärts. Diese Fehler sind nicht leicht zu lokalisieren, vermutlich wird irgendwo im finalization-Abschnitt ein Objekt verwendet, das nicht mehr gültig ist. Kandidaten dafür sind z.B. Threads, die in ihrer Terminationsroutine auf Objekte der Unit 'Classes' zugreifen, die aber schon freigeben wurden. Abhilfe: Gib die Threads frei BEVOR das Programm terminiert. Virus & Co kann man zu 99.999% ausschließen. Der Fehler liegt :zwinker: immer im Programm(ierer). |
Re: Runtime Error 216
Hallo,
das ging aber schnell. Kann es sein, dass ein Timer die Ursache sein könnte? Ich werde mir mal ansehen, ob dieser zum Zeitpunkt des Beendens noch enabled ist. Das Problem beim Debuggen ist folgendes: Auf dem Rechner, wo der Fehler auftritt, ist kein Delphi installiert. Auf meinem Delphi-Rechner hingegen tritt dieser Fehler überhaupt nie auf. mfg Herbert |
Re: Runtime Error 216
Kleiner Tipp, guck mal in der Hilfe nach, was Laufzeitfehler 216 ist.
|
Re: Runtime Error 216
Hallo nochmals,
ich lese schon eine ganze Zeit lang in den diversen Unterlagen. Zum Fehler 216 gibt es leider keine eindeutige Antwort. Einmal heisst es, es kann ein Virus (Trojaner SubSeven) sein, dann heisst es wieder, es können Programme sein, die im Hintergrund laufen, usw. Ich glaube aber, dass es doch an meiner Application liegen muss, obwohl auf verschiedenen Rechnern verschiedene Ergebnisse entstehen. Bei dem obigen Tipp mit dem Breakpoint bin ich auf folgende Routine einer eingebundenen Indy-Unit gekommen:
Delphi-Quellcode:
Das kann doch nicht stimmen. In der finalization sollte doch stehen: UnRegister....
initialization
RegisterFTPListParser(TIdFTPLPMusic) finalization RegisterFTPListParser(TIdFTPLPMusic) end; Ich habe das mal geändert und neu compiliert. Mal sehen, was passiert. mfg Herbert |
Re: Runtime Error 216
also meine Hilfe sagt ganz eindeutig dazu:
Zitat:
|
Re: Runtime Error 216
Hallo Luckie,
genau, das ist ja auch meine Meinung, nur wie komme ich dem Übeltäter auf die Spur. Wie könnte ich vorgehen, um die Ursache zu finden? Kann ich aufgrund der Fehler-Adresse etwas finden? mfg Herbert |
Re: Runtime Error 216
Verwendest Du dll's?
Dann fehlt bestimmt ein ShareMem in der dpr als ersten Eintrag bei den uses. Wenn Du eine dll per Assistent erstellst, wird in den dpr der dll ein Hinweis auf sharemem gegeben. Falls ohne dll, dann kannst Du die sharemem trotzdem einbinden. Tut ja nicht weh. |
Re: Runtime Error 216
Zitat:
![]() Sollte dir dann die Zeile im Code angeben, wo der Fehler herkommt. |
Re: Runtime Error 216
@RavenIV
Wenn ich ShareMem hinzufüge, kommen auch auf dem Entwickler-PC folgende Fehler: Runtime Error 216 at 00404172 und nach wiederholten Aufrufen Runtime Error 217 at 0041BED4 @toms madexcept habe ich installiert. Muss ich da irgendetwas starten bzw. einfügen, damit ich etwas sehe? mfg Herbert |
Re: Runtime Error 216
Da ich nach wie vor noch keine Lösung habe und das Problem am Entwicklungsrechner absolut nicht vorkommt, habe ich mal madexcept installiert und die neu compilierte Anwendung am anderen Rechner gestartet. Ergebnis:
Zitat:
Kann jemand damit etwas anfangen? Ich brauche nochmal eure Hilfe. mfg Herbert |
Re: Runtime Error 216
Liste der Anhänge anzeigen (Anzahl: 1)
So, jetzt habe ich noch einen Versuch gemacht:
Habe FASTMM4 eingebunden und bekomme jetzt folgende Meldung beim Beenden des Programms (siehe Anhang): Schaut für mich so aus, als wären die Übeltäter in Indy zu finden. Kann das sein bzw. wenn ja, was kann ich dagegen tun? mfg Herbert |
Re: Runtime Error 216
Das sind MemoryLeaks, also Löcher im Speicher.
Vermutlich von nicht freigegebenen Objekten. Das muss aber nicht heissen, dass das Programm deshalb eine Fehlermeldung erzeugt. |
Re: Runtime Error 216
Mittlerweile konnte ich mein Problem ein wenig einkreisen.
Ich rufe mittels ButtonClick von meinem Hauptformular aus ein weiteres Formular (Unit FTP) auf. In dieser Unit habe ich in letzter Zeit einiges geändert. Die Unit FTP ist im Hauptformular mit uses FTP eingefügt, das Formular wird bei Bedarf per ButtonClick erzeugt:
Delphi-Quellcode:
Ich habe nun aus meinem Projekt diese Unit FTP mal entfernt - und siehe da, die Fehlermeldungen sind weg.
procedure ButtonClick(Sender: TObject);
begin Application.CreateForm(TF_FTP, F_FTP); F_FTP.ShowModal; F_FTP.Free; end; Jetzt meine Fragen: Wieso kommen die Fehlermeldungen bei hinzugefügter Unit FTP, obwohl der Button zum FTP.ShowModal NIE gedrückt wurde? Wird da eben bei Programmstart in der Unit FTP trotzdem etwas initialisiert, wenn ja, was bzw. wo? mfg Herbert |
Re: Runtime Error 216
Zitat:
Dann wird sie natürlich bei Programmende auch wieder gelöscht. Dabei wird dann wohl der Fehler entstehen. |
Re: Runtime Error 216
Vielen herzlichen Dank nochmals an euch alle. Ich glaube, ich konnte mit eurer Hilfe mein Problem lösen.
Durch das ewige Herumprobieren - unit FTP aus dem Programm entfernen / in das Programm einschliessen, usw. - hatte sich die unit FTP in das dpr automatisch eingetragen. Parallel dazu öffnete ich ja mittels ButtonClick das Formular händisch (siehe weiter oben). Das war vermutlich auch der Grund, dass ShareMem noch mehr Fehler produzierte. Nachdem ich jetzt die automatischen Einbindung der FTP-Unit gelöscht habe, lässt sich auch ShareMem fehlerfrei einbinden. Seitdem läuft meine Anwendung jetzt fehlerfrei. Ich hoffe, dass dieser Zustand weiterhin anhält und dies die Ursache für die Fehlermeldungen war. Sollte wider Erwarten nochmals ein Problem auftreten, werde ich die hier berichten. mfg Herbert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz