AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TOleContainer.Doverb(ovShow) verursacht Exception
Thema durchsuchen
Ansicht
Themen-Optionen

TOleContainer.Doverb(ovShow) verursacht Exception

Offene Frage von "berens"
Ein Thema von berens · begonnen am 30. Mai 2007 · letzter Beitrag vom 31. Mai 2007
Antwort Antwort
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#1

TOleContainer.Doverb(ovShow) verursacht Exception

  Alt 30. Mai 2007, 17:05
Hallo!

Mal wieder Problem: Ich habe einen TOleContainer, der nach dem Laden, während des ovShow eine Exception verursacht (oder das "Client" Programm).

Generell geht es. Das Problem tritt auf, wenn ich gleich zu Programmstart nacheinander 3x das gleiche OleObjekt erstelle. Das ist der VLCPlayer über ActiveX aka VideoLAN.VLCPlugin.2 .

Manchmal hilft es, zwischen dem Erstellen 10 Sekunden zu warten. Wäre natürlich später Klasse, wenn mein Programm bei 6 Containern also mindestens eine komplette Minute zum Starten braucht. Das System klappt spätestens nicht mehr, wenn bei dem Kunden dann ein PC dabei ist, der mehr als 10 Sekunden braucht...

Ein möglicher Fehler wäre, dass das betroffene OleObjekt teilweise oder ganz ausserhalb des scrollbaren Bereichs liegt. Normalerweise sollte dann aber eine Meldung in der Form "Das Objekt kann den Fokus nicht erhalten, da es unsichtbar ist" oder soein blabla.

Sollte es einmal so sein, dass die Fehlermeldung
Zitat:
---------------------------
Benachrichtigung über Debugger-Problem
---------------------------
In Projekt E:\debug\Project1.exe trat ein Problem mit folgender Meldung auf: 'access violation at 0x77c17740: read of address 0x00000000'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK
---------------------------
in einer Endlos-Schleife angezeigt wird, müsste ja ansich die ShowMessage kommen. Tut Sie aber nicht.

Ich habe auch eine Application.OnException mit einfach nur "exit".

Delphi-Quellcode:
  try
    CreateObject('VideoLAN.VLCPlugin.2', False);

    DOV;
...
Delphi-Quellcode:
procedure TVLCPlayer.DoV;
begin
  try
    DoVerb(ovShow);
  except
    on e: exception do begin
      ShowMessage(e.Message);
    end;
  end;
end;
Beim Beenden des Programmes als fertige .exe, also ohne Delphi, kommt immer:
Zitat:
---------------------------
Just-In-Time-Debugger von Visual Studio
---------------------------
Unbehandelte Win32-Ausnahme in welcome.exe [3920]. Fehler beim Just-In-Time-Debuggen der Ausnahme: Für keinen installierten Debugger ist das Just-In-Time-Debuggen aktiviert. In Visual Studio kann das Just-In-Time über folgenden Menüpfad aktiviert werden: "Extras -> Optionen -> Debuggen -> Just-In-Time".

Weitere Informationen finden Sie unter "Just-In-Time-Debuggen, Fehler" im Index der Dokumentation.
---------------------------
OK
---------------------------
Ausserdem kommt beim Starten mit Delphi immer dieser Fehler:
Zitat:
---------------------------
bds.exe - bordbk105N.dll
---------------------------
Assertion failure: "index <= items.n()"
in ..\win32src\DBKIMPL.CPP at line 2671
Continue execution?

---------------------------
Ja Nein
---------------------------
Ein Klick auf "Nein" und das komplette Delphi+Quellcode is zu




Nun die eigentlichen Fragen:

* Gibt es einen Ersatz zu TOleContainer.DoVerb(ovshow)
* Kann man Delphi nicht einfach "STFU" sagen, so dass wirklich _alle_ Fehlermeldungen unterdrückt werden?
* Warum **** dauernd die IDE ab? ("Woher kommt der Fehler in Delphi mit der bordbk105N.dll?)
* Was ist aus der supertollen Trennung zwischen Host (mein Programm) und Client (ActiveX, hier VLC-Player) geworden?
* Warum bekomme ich die Exceptions von VLC ab?
* Warum ist es technisch Möglich, dass das ActiveX (als dessen .exe oder .dll) mit den Kommandozeilen-Parametern gestartet wird, mit denen mein Programm gestartet wurde?

Ohne Ironie:
Mein Programm läuft wirklich super, und ich habe kein einziges Problem mit irgendeinem Fehler. Alles was mir Probleme bereitet, sind solche **** Fehlermeldungen. Würde das Programm einfach weiterlaufen, wäre alles Klasse.


Für irgendwelche Tips und Ideen bin ich wie immer seeeeehr dankbar.

PS: Sorry für die schlechte Laune, aber wenn man 90% des Arbeitstages mit dem wegklicken von Fehlermeldungen verbringt statt zu Programmieren, macht das Ganze irgendwann keinen Spaß mehr.

Mfg Mathias
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: TOleContainer.Doverb(ovShow) verursacht Exception

  Alt 30. Mai 2007, 18:22
Häufig werden OLE-Objekte nicht korrekt programmiert, da es nicht ganz einfach ist.
Ich würde zunächst mal mehrere OLE-Objekte (VideoLAN.VLCPlugin) in WinWord einfügen und schauen was passiert.
Kannst du einen Fehler provozieren, dann eine Mail an den Hersteller und auf Updates hoffen.

Du hast den Just-In-Time Debugger von Visual Studio auf deinem Rechner aktiv.
Vorallem in Zuammenarbeit mit Delphi ist das sehr störend: erst wird ewig VS geladen, dann gibt eine Fehlermeldung ohne Ausagekraft und zum Schluss gibt's eh nix zu debuggen.
Versuch mal den JIT-Debugger zu deaktivieren.

Ich weiss auch nicht, welche Komponenten du in deiner Delphi IDE installiert hast. Fehlerhafte Komponenten können auf jeden Fall die ganze IDE zum Abstürzen bringen.

* Was ist aus der supertollen Trennung zwischen Host (mein Programm) und Client (ActiveX, hier VLC-Player) geworden?
* Warum bekomme ich die Exceptions von VLC ab?
Dein Programm ist der Client; der VLC-Player ist der Host.
Exceptions des Host-Objekts werden immer an den Client übergeben.

Die Idee, ALLE Exception in der Anwendung komplett zu unterdrücken führt zu nichts.
Besser man baut sein Haus (Programm) auf holzwurmfreien Balken.
Andreas
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TOleContainer.Doverb(ovShow) verursacht Exception

  Alt 31. Mai 2007, 00:55
Danke schonmal für die Antwort.

Leider habe ich keine Ahnung wie ich die Sachen in Word einfüge, denn in der Ole-Liste stehen nur vordefinierte Werte, und bei "Von Datei" wir irgendein anderes Programm gestartet.

Habe kein Visual Studio absichtlich installiert, wird wohl mit einem M$-SDK bei Delphi 2007 dabei gewesen sein. Ich finde keinen Punkt um JIT zu deaktivieren. Muss ich mal googlen. Falls irgendwer weiss wie...


Nichts desto trotz:
Was würde es mir bringen, die Exceptions des Ole-Containers zu bekommen, wenn ich nichts dagegen tun kann? Ich komme ja noch nicht einmal in den except-Teil von try ole.doverb(ovshow) except ... end. Und Application.OnException reagiert ja auch nicht gescheit auf diese AV.

Gibt es also, unabhängig davon wie sinnvoll, schwachsinnig oder gefährlich dieses Verfahren ist, eine Möglichkeit, alle Fehlermeldungen zu unterdrücken oder in ein stilles Logbuch (z.B. meine eigene Routine die das in eine TXT Datei) speichert?

Mfg
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: TOleContainer.Doverb(ovShow) verursacht Exception

  Alt 31. Mai 2007, 11:09
Exceptions, die in einem COM-Server entstehen werden automatisch von der VCL in eine Delphi-Exception umgewandelt (dabei sind die Interfaces IErrorInfo und ISupportErrorInfo im Spiel)
Wenn die Exception nicht durch einen Exception-Handler (try..except Block) abgefangen wird,
steigt sie wie eine Luftblase durch den Honig nach oben.
Application.OnException ist die letzte Gelegenheit die Exception doch noch zu packen und z.B. in eine Logdatei zu schreiben.
Falls Application.OnException nicht zugewiesen ist, wird die Exception über Application.ShowException(E) angezeigt.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnException := AppException;
end;
procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
  if E is EOleSysError then // OLE-Exceptions
    Caption := E.Message // nur als Caption anzeigen um störende Meldungen zu vermeiden
  else
    Application.ShowException(E); // alle anderen Exception wie gehabt anzeigen
end;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 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