[CFileDialog] DoModal schmeisst Ausnahme "Schnittstelle unbekannt"



  • Hi,

    bin gerade gefrustet, weil scheinbar meine IDE spinnt. Will bloss einen CFileDialog anzeigen und mir den gewählten Pfad holen. Das funktioniert auch im Grunde, also der Dialog wird wie gewollt dargestellt.
    ABER: Beim Aufruf von DoModal() bekomme ich immer irgendwelche Ausnahmen, abh. von wo ich gerade aufrufe (hab's in verschied. Programmteilen getestet). Sogar in älterem Kode kommen jetzt plötzlich beim CFileDialog::DoModal()-Aufruf Ausnahmen???
    Die Ausnahme hat verschiedene Auslöser(MFC-LIB-Kode), nur die Meldung "unbekannte Schnittstelle" ist immer gleich.
    Des Weiteren ist der Wert des Dialoges nach dem Ctor-Aufruf 0, ist das korrekt?
    Wie liegt das Problem?

    Schon mal danke,
    don_basto.

    PS: Hatte vor dem Auftreten des Fehler beim Erstellen einmal zu wenig Speicherplatz. Kann das Einfluss auf die IDE haben?



  • Kannst Du mal eine konkrete Fehlermeldung posten?
    Hast Du ein Repro-Code?
    Welches VS, OS?



  • (1) mein Computer: VS 7.1, Win2000 (SP4)

    (2) was ist Repro-Kode?

    (3) Ist unterschiedlich, ein Beispiel:

    Eine Ausnahme (erste Chance) bei 0x77e7a4e1 Test.exe: 0x000006B5: Die Schnittstelle ist unbekannt.

    Darauhin öffnet der Debugger die Datei afxtls.cpp und zeigt auf folgende Zeile in der Funktion CThreadSlotData::GetThreadValue(int nSlot):

    LeaveCriticalSection(&m_sect);
    	return pRetVal;
    

    <edit> Nach einem Neustart meines Systems kommt nur der beschrieben Fehler immer 2x vor der Darstellung des Dialoges. </edit>



  • don_basto schrieb:

    (2) was ist Repro-Kode?

    Vermutlich Code um das Problem nachzustellen.
    Was muss man in ein leeres Projekt packen, damit es den Fehler gibt? 🙂



  • Dann hier der Repro-Kode 😉 :
    - SDI-Anwendung
    - in Ansicht eine Nachtichtenbehandlug für WM_LBUTTONDOWN einfügen und den Metodenrumpf so ausfüllen:

    void CTestFileDialogView::OnLButtonDown(UINT nFlags, CPoint point)
    {
    	CFileDialog fileDlg(FALSE);
    	TRACE("CFileDialog::DoModal()..\n");
    	fileDlg.DoModal();
    
    	CView::OnLButtonDown(nFlags, point);
    }
    

    Das war's.

    <edit> Scheinbar wird die oben beschrieben Ausnahme immer geworfen. Hab jetzt meinen Debugger auf ignorieren dieser Ausnahme gestellt. Falls jemand weiss, warum hier eine Ausnahme fliegt, bitte melden. </edti>


Anmelden zum Antworten