![]() |
Zugriffsverletzung bei Anzeigen eines Hints
Folgendes Problem bei einer D2007 - Anwendung:
Code:
Die Anwendung läuft 24/7. Die Zugriffsverletzung wird ausgelöst (nach Benutzerberichten) wenn das Programm via Fernwartung (Teamviewer) aus der Minimierung wieder hergestellt wird. Ich kann das auf meinem Entwicklungssystem allerdings aktuell nicht reproduzieren.
exception class : EAccessViolation
exception message : Zugriffsverletzung bei Adresse 004CE110 in Modul 'Application.exe'. Lesen von Adresse 00000004. 004ce110 Application.exe Forms TMonitor.GetBoundsRect 004ce0ee Application.exe Forms TMonitor.GetWidth 004ba487 Application.exe Controls THintWindow.ActivateHint 004ba6af Application.exe Controls THintWindow.ActivateHintData 004d24fa Application.exe Forms TApplication.ActivateHint 004d1ec1 Application.exe Forms TApplication.HintTimerExpired 004cf14e Application.exe Forms HintTimerProc 7e3696c2 USER32.dll DispatchMessageA 004d0e00 Application.exe Forms TApplication.ProcessMessage 004d0e3a Application.exe Forms TApplication.HandleMessage 004d112f Application.exe Forms TApplication.Run 00773fa8 Application.exe Application 97 initialization Hat zufälligerweise von Euch jemand eine Idee, wo ich suchen könnte? Mir fehlt da aktuell noch der Ansatz. |
AW: Zugriffsverletzung bei Anzeigen eines Hints
Hast du eine Pro Version von Delphi 2007? Wenn ja dann schau doch mal was beim Aufruf der Methode TMonitor.GetBoundsRect() steht.
Hast du alle Updates für D2007 installiert? Vielleicht bedarf es ja eines Fixes. |
AW: Zugriffsverletzung bei Anzeigen eines Hints
TeamViewer basiert ja auf VNC. Und das arbeitet massiv mit Hooks aus Performancegründen. Vielleicht kann man diese "injections" deaktivieren. Das würde ich mal als erstes versuchen.
|
AW: Zugriffsverletzung bei Anzeigen eines Hints
Auf den ersten Blick fallen mit zwei Gründe für diese Exception auf:
Der Prozedurzeiger MultiMon.GetMonitorInfo steht auf urplötzlich NIL. (TMonitor.GetBoundsRect will darauf zugreifen) Oder Screen.MonitorFromPoint(Point(Rect.Left, Rect.Top)); in THintWindow.ActivateHint liefert keinen Monitor (also NIL) und die nachfolgenden Zugriffe wollen dann auf dieses Objekt zugreifen. Tippen würde ich auf Letzeres, welches versucht den "Monitor" zu dem Hint zu finden. |
AW: Zugriffsverletzung bei Anzeigen eines Hints
Wir haben dort jeweils auch noch eine zweite Anwendung im Einsatz, die dieses Verhalten nicht zeigt.. Die betroffene Anwendung hatte mal ein Tray-Icon, das habe ich allerdings bereits entfernt. Da es sowieso auf dedizierten Rechnern läuft, werde ich jetzt erst mal das Minimieren verbieten.
|
AW: Zugriffsverletzung bei Anzeigen eines Hints
Hallo mquadrat,
Problem & Lösung bekannt: ![]() TApplicationEvents nutzen, OnHint Handler zuweisen und folgendes einsetzen:
Delphi-Quellcode:
if Monitor.Handle = 0 then ApplicationEvents1.CancelDispatch;
Gruß, Assertor |
AW: Zugriffsverletzung bei Anzeigen eines Hints
mhh den QualityCentral Eintrag muss ich entweder übersehen haben, oder Google hat ihn nicht gefunden :oops:
|
AW: Zugriffsverletzung bei Anzeigen eines Hints
Zitat:
Viele Grüße, Assertor |
AW: Zugriffsverletzung bei Anzeigen eines Hints
:-D Die Rechner werden für nichts anderes verwendet. Steht zumindest so im Vertrag
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 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