in DLL Dialog öffnen



  • Hi,

    ich hab 2 MFC Projekte. Einmal für ne EXE (Dialogbasierend) und eine für ne DLL.
    Ich rufe mit dem OK-Button der EXE folgende Funktion der DLL auf:

    int CTestApp::showWaitDlg()
    {
    	CDWait waitDlg; //CDWait ist eine neue von mir im DLL-Projekt angelegte Formularklasse
    	int nRet = -1;
    	CString strOut;
    	nRet = waitDlg.DoModal(); //Zeile wird nicht 
    	strOut.Format("%i", nRet);
    	MessageBox(GetActiveWindow(), strOut, "Juhu", MB_ICONINFORMATION);
    	return 0;
    }
    

    Das Aufpoppen der MessageBox funktioniert. Nur mein neu angelegter Dialog wird nicht angezeigt. Beim Debuggen macht er bei der Zeile nRet = waitDlg.DoModal(); krad mal gar nix 😞

    Jemand ne Idee warum?



  • dann gibts wohl nen Fehler beim Erstellen des Dialoges. Schau dir mal den Rückgabewert von DoModal an. benutzt du OLE, irgendwelche Steuerelemente oder sowas der Art im Dialog?



  • Hi,

    der Returnwert von DoModal() ist -1, aber warum?
    Hab in dem Dialog nur ein schreibgeschütztes Eingabefeld mit der Membervariablen m_strMeldung das ich bei OnInitDialog so fülle:
    m_strMeldung = "Hallo";
    UpdateData(false);

    Sonst nix



  • ist es ein Editfeld doer ein RichEdit-Feld?



  • nein



  • Geuse schrieb:

    nein

    Sorry, es ist ein Editfeld



  • erstell dir mal nen neuen dialog mach an dem nix und versuch den zu starten, fa fällt mir jetzt auch nicht ein, woran das liegen könnte. Kannst du nur probieren.



  • Geuse schrieb:

    Hi,

    ich hab 2 MFC Projekte. Einmal für ne EXE (Dialogbasierend) und eine für ne DLL.
    Ich rufe mit dem OK-Button der EXE folgende Funktion der DLL auf:

    int CTestApp::showWaitDlg()
    {
    	CDWait waitDlg; //CDWait ist eine neue von mir im DLL-Projekt angelegte Formularklasse
    	int nRet = -1;
    	CString strOut;
    	nRet = waitDlg.DoModal(); //Zeile wird nicht 
    	strOut.Format("%i", nRet);
    	MessageBox(GetActiveWindow(), strOut, "Juhu", MB_ICONINFORMATION);
    	return 0;
    }
    

    Das Aufpoppen der MessageBox funktioniert. Nur mein neu angelegter Dialog wird nicht angezeigt. Beim Debuggen macht er bei der Zeile nRet = waitDlg.DoModal(); krad mal gar nix 😞

    Jemand ne Idee warum?

    Ist CTestApp aus der DLL? Könnte ein Ressourcen / Ressourcen-ID Problem sein. Bist du sicher, dass die DLL geladen ist?



  • danke euch beiden...
    habs raus bekommen...
    mit AFX_MANAGE_STATE(AfxGetStaticModuleState()); geht`s jetzt.

    deshalb geht`s jetzt:
    Besonderheit von DLLs, die die MFC verwenden. Jede Funktion in der eine MFC Klasse verwendet wird, muss als erstes Grundsätzlich das AFX_MANAGE_STATE Makro verwenden - sonst kommt MFC durcheinander und Ihr Programm stützt ab. Wie gesagt: Das ist eine Spezialität von MFC: Bei normalen DLLs ist so etwas nicht notwendig.

    hier nochmal die gesamte dll-funktion mit der es geht:

    int CTestApp::showWaitDlg()
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    	CDWait waitDlg;
    	int nRet = 0;
    	CString strOut;
    	nRet = waitDlg.DoModal();
    	strOut.Format("%i", nRet);
    	MessageBox(GetActiveWindow(), strOut, "Juhu", MB_ICONINFORMATION);
    	return 0;
    }
    

Anmelden zum Antworten