wxWidgets wxFileDialog exception in ShowModal()



  • Hallo zusammen,

    ich habe grade ein Problem mit wxFileDialog von wxWidgets.

    Ich bekomme folgende Exception:

    Ausnahme ausgelöst bei 0x74F2845D (KernelBase.dll) in main.exe: 0x000006BA: The RPC server is unavailable.
    

    Es geht um folgenden Zeilen:

    wxFileDialog dialog(this, "", "", "", "*.txt", wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
    if (chooseExportFile.ShowModal() == wxID_OK){
    ...
    }
    

    Die Ausnahme wird in "ShowModal" ausgelöst.
    Der Dialog wird innehalb eines Eventhandlers aufgerufen, der Teil eines Panels ist.
    Ich befürchte, dass ich hier von irgendwelchen Nebeneffekten betroffen bin, denn als ich versucht habe, den Fehler in einem minimalen Beispiel nachzustellen bin ich kläglich gescheitert. In dem kleinen Beispiel funktioniert alles wie es soll.

    Mit dem Debugger habe ich mich durchgeschlagen, bis in die Funktion:

    static bool DoShowCommFileDialog(OPENFILENAME *of, long style, DWORD *err)
    

    die sich in der wxWidgets Source Code Strucut am Pfad: "src/msw/filedlg.cpp" befindet.
    In der Zeile:

    if ( style & wxFD_SAVE ? GetSaveFileName(of) : GetOpenFileName(of) )
    

    wird die Exception geworfen. Leider erlaubt mir der Debugger nicht, da noch "rein zu steppen". Wenn ich da einen Einzelschritt rein machen möchte, kommt die Exception, aber dass ist dann auch schon Windows API fürchte ich.

    Die Anwendung ist im Moment komplett single threaded. Und andere Dialoge funktionieren an der Stelle (auch modal).

    Hat jemand eine Idee, an was das liegen könnte?

    Achso, wenn ich die Exception ignoriere, wird der Dialog aufgebaut und die Software läuft weiter.



  • Hm, ok.

    Ich habe letztens bei mir die Debugger Einstellungen angepasst. Und zwar so, dass bei jeder win32 Exception angehalten wird. Wenn ich die Einstellungen auf Standard zurück setze, reagiert der Debugger nicht auf die Exception.

    Anders herum, wenn die Debugger Einstellungen so sind, dass bei jeder win32 Exception unterbrochen wird, wird immer wenn:

    wxFileDialog dialog(this, "", "", "", "*.txt", wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
    if (chooseExportFile.ShowModal() == wxID_OK){
    }
    

    aufgerufen wird, die Exception vom Debugger gefangen und unterbrochen.

    Das hieße, dass ich so zwar weiterarbeiten kann, aber irgendwie scheint mir das nicht die sauberste Lösung zu sein.



  • Ist es der FileDialog der die Exception auslöst?
    Triggern andere Dialoge die Exception auch? ( wxTextEntryDialog zb.)

    Was für ein Typ ist chooseExportFile und wie wird der erstellt?



  • Sry, chooseExportFile ist ein Copy & Paste Fehler. Das muss heißen:

    wxFileDialog dialog(this, "", "", "", "*.txt", wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
    if (dialog.ShowModal() == wxID_OK){
    }
    

    Die anderen Dialoge die ich probiert habe (wxMessageDialog und wxTextEntryDialog), triggern die Exception nicht.