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; }