TVLCPlugin mit "Gleitkommaüberlauf"



  • Hallo,

    ich versuche gerade das ActiveX-Plugin vom "VLC" in ein Projekt einzubinden. Kompiliert wird das ganze problemlos, leider bricht die Anwendung aber noch bevor sie richtig gestartet hat mit der Fehlermeldung: "Gleitkommaüberlauf" (ja mehr ist es tatsächlich nich 😃 ) ab. Hat schonmal jemand mit diesem Plugin (TVLCPlugin // TVLCPlugin2) gearbeitet und kann mir einen Tipp geben wie ich diese Meldung beseitigen kann?

    P.S.: Es ist noch keine einzige Codezeile geschrieben. Lediglich die VLCPlugin-Komponente hab ich auf das Formular gezogen (natürlich vorher den entsprechenden Header eingebunden).

    //Edit: Ich benutze übrigens den Builder 2009, macht aber keinen Unterschied, denn im Builder 6 besteht das gleiche Problem -.-

    Danke im Voraus!

    LG, Micha



  • Sooooo, ich bin nun schlauer, aber der Fehler tritt trotzdem auf -.-

    TVLCPlugin2 *VLCPlayer = new TVLCPlugin2(this);
    VLCPlayer->Parent = this; // Hier tritt die Meldung auf
    /*
    Verwende ich stattdessen:
    VLCPlayer->SetParentComponent(this);
    bricht er erst in der Zeile VLCPlayer->playlist->play(); ab
    */
    VLCPlayer->SetBounds(0,0,100,100);
    VLCPlayer->Show();
    VLCPlayer->BaseURL = "hier die URL zum Stream";
    try {
    	VLCPlayer->playlist->play();
    } catch (Exception& e) {
    	ShowMessage(e.Message); //Gleitkommaüberlauf
    }
    

    Aber mal ganz davon abgesehen wird die Komponente, wenn ich sie zur Laufzeit erstelle auch nicht angezeigt. So wie ich es an anderen Stellen (VLC-Wiki) gelesen habe soll es mit Delphi wohl funktionieren (Gibt es extra eine Anleitung für). Wieso dann nicht mit C++?

    VLCPlugin1:=TVLCPlugin.Create(Self); 
    VLCPlugin1.Parent:=Self;
    VLCPlugin1.SetBounds(0, 0, 100, 100); 
    VLCPlugin1.Show;
    

    Mal vom "play()" ist der Code doch identisch?! Sind die unterschiede zwischen Delphi und C++ doch sooo groß?

    LG, Micha



  • In welchem Modul tritt der Fehler auf? (-> Stacktrace analysieren)



  • Hallo,

    "libdshow_plugin.dll"

    try {
    	VLCPlayer->playlist->playItem(0);
    } catch (Exception& e) {
    	ShowMessage(e.StackTrace); // Bringt kein Ergebnis (bleibt leer)
    }
    

    LG, Micha



  • RandomAccess85 schrieb:

    "libdshow_plugin.dll"

    Das deutet eher darauf hin, daß es nicht dein Fehler ist. Versuche doch mal - wenn du das Delphi/C++Builder-Bundle oder RAD Studio hast -, ob das von Delphi aus funktioniert, ggf. kannst du es ja auch mit VC, VB oder VC# testen.

    Vielleicht ist das aber tatsächlich ein C++Builder-Spezifikum. Eine vage Erinnerung an FPU-Fehlermeldungen bei Graphikanwendungen habe ich noch; du könntest auch mal nachlesen (und ausprobieren), was hier zu _control87() gesagt wird.

    RandomAccess85 schrieb:

    } catch (Exception& e) {
    	ShowMessage(e.StackTrace); // Bringt kein Ergebnis (bleibt leer)
    }
    

    Natürlich, weil dein Programm standardmäßig nicht über einen Stacktrace-Mechanismus verfügt; lies einfach die zugehörigen Kommentare in SysUtils.pas:

    Exception = class(TObject)
      ...
      class var
        // Hook this function to return an opaque data structure that contains stack information
        // for the given exception information record. This function will be called when the
        // exception is about to be raised or if this is an external exception such as an
        // Access Violation, called soon after the object is created.
        GetExceptionStackInfoProc: function (P: PExceptionRecord): Pointer;
        // This function is called to return a string representation of the above opaque
        // data structure
        GetStackInfoStringProc: function (Info: Pointer): string;
        // This function is called when the destructor is called to clean up any data associated
        // with the given opaque data structure.
        CleanUpStackInfoProc: procedure (Info: Pointer);
    {$ENDIF}
      end;
    

    Außerdem meinte ich, daß du einen Blick in das Stacktrace-Fenster des Debugger werfen sollst 😉



  • Hallo,

    Delphi muss ich erst nachinstallieren, aber sobald ich das gemacht habe werde ich es dort versuchen.

    Aah ok, dann hab ich das mit dem stacktrace falsch verstanden. Wo find ich denn dieses Fenster?

    LG, Micha



  • Mit Delphi klappt es leider auch nicht
    in MS Visual Studio klappt es ohne Probleme.



  • _control87() mal ausprobiert?

    *Edit:*Ansicht, Debug-Fenster, Aufruf-Stack. In der Debugging-Perspektive meist schon oben links sichtbar. Kann man aber auch selbst drauf kommen 😉



  • Hi,

    hab's mittlerweile auch gefunden :p! Aber so wirklich schlau werd ich daraus auch nicht. Nach Abbruch steht er an der Stelle ":7674fbae Kernel.RaiseException + 0x58", was auch soweit Sinn macht. Vorher steht er am Punkt "TForm1::Button1Click", was auch Sinn macht. Aber was es mir sagen sollte les ich dort nicht raus. Wenn ich mit dem Debugger Zeile für Zeile (F7) abarbeite kommt es seltsamerweise zu keiner Exception?!

    In _control87 versuch ich mir derzeit einzulesen.

    LG, Micha



  • Hallo,

    [gelöst]

    _control87(MCW_EM, MCW_EM);
    

    War die Lösung. Vorher noch die float.h einbinden und es funktioniert problemlos.

    Danke 🙂

    LG, Micha


Anmelden zum Antworten