Problem mit Doc/View
-
Hallo!
Ich habe eine SDI-Anwendung (mit MFC-Assistent erstellt). Alles funktioniert einwandfrei ausser: Wenn ich in dem Programm auf den "neu"-button druecke, bricht das Programm mit Fehlermeldung ab. DeleteContents und OnNewDocument sidn eigentlich ok soweit ich das ueberblicken kann, da wird nichts essentielles was den Ablauf stoeren koennte angerichtet.
Intensives Debuggen in die innereien der MFC hinein fuehrt bis zu einem Punkt in der wincore.cppvoid PASCAL CWnd::SendMessageToDescendants(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL bDeep, BOOL bOnlyPerm) { // walk through HWNDs to avoid creating temporary CWnd objects // unless we need to call this function recursively for (HWND hWndChild = ::GetTopWindow(hWnd); hWndChild != NULL; hWndChild = ::GetNextWindow(hWndChild, GW_HWNDNEXT)) { // if bOnlyPerm is TRUE, don't send to non-permanent windows if (bOnlyPerm) { CWnd* pWnd = CWnd::FromHandlePermanent(hWndChild); if (pWnd != NULL) { // call window proc directly since it is a C++ window AfxCallWndProc(pWnd, pWnd->m_hWnd, message, wParam, lParam); } } else { // send message with Windows SendMessage API ::SendMessage(hWndChild, message, wParam, lParam); } if (bDeep && ::GetTopWindow(hWndChild) != NULL) { // send to child windows after parent SendMessageToDescendants(hWndChild, message, wParam, lParam, bDeep, bOnlyPerm); } } }
und bei AfxCallWndProc ist Schluss. pWnd verweist auf die View-Klasse und message hat den Wert 868 (keine Ahnung was das ist). Das komische ist, dass bei Programmstart ja genau die gleiche Prozedur vollkommen glatt durchlaeuft. Kann mir da einer helfen? oder zumindest ne vage idee?
Danke
-
DerGhost schrieb:
Wenn ich in dem Programm auf den "neu"-button druecke, bricht das Programm mit Fehlermeldung ab.
Und die lautet?
DeleteContents und OnNewDocument sidn eigentlich ok soweit ich das ueberblicken kann, da wird nichts essentielles was den Ablauf stoeren koennte angerichtet.
Dann ist ja gut.
Intensives Debuggen in die innereien der MFC hinein fuehrt bis zu einem Punkt in der wincore.cpp
Nur so als Tipp: Der Fehler steckt nicht immer da, wo er sich bemerkbar macht. Es ist eher unwahrscheinlich, dass du einen Fehler in den MFC gefunden hast.
und bei AfxCallWndProc ist Schluss.
Und was genau heißt das jetzt?
pWnd verweist auf die View-Klasse und message hat den Wert 868 (keine Ahnung was das ist).
WM_AFXFIRST + 4. Kommt also wohl aus einer Messagemap.
zumindest ne vage idee?
Es liegt an deinem Code.
-
Ich will nicht spammen, aber der Post über mir ist lustig geschrieben.
-
Also ich fand den Beitrag hier extem hilfreich und sehr angemessen. Also erstens habe ich nicht behauptet einen Fehler in der MFC zu finden sondern nur dass dieser Aufruf der letzte vom Debugger zu verfolgende ist (mit "da ist Schluss" meinte ich dass fuer mich da das Debugging aufhoert, da bricht das ganze naemlich ab mit der Fehlermeldung)- also geh ich davon aus dass jemand weiss, was genau durch diese Funktion getan wird und daraus schliessen kann was zumindest grundsaetzlich in meinem Programm falsch sein koennte, wenn diese nicht ausfuehrbar ist.
Die Fehlermeldung die das Programm produziert hat war die absolut Debug-Modus-Typische "fehler in wincore.cpp zeile xy" und ich hielt es fuer unnoetig das aufzufuehren.
NAja jedenfalls danke fuer den Konstruktiven Teil des Postings und Sorry dass ich noch so viel hier schreibe obwohl ich das Problem so eben geloest habe:
es lag an einem Button der faelschlicherweise in den View-Klasse war und in der OnInitialUpdate Created wurde was wohl bei der Neukonstruktion zu Problemen fuehrte (ich wusste halt nicht genau ob die View neu erzeugt wird und ob OnInitialUpdate neu aufgerufen wird wenn man ein neues Dokument anlegt).
-
DerGhost schrieb:
also geh ich davon aus dass jemand weiss, was genau durch diese Funktion getan wird und daraus schliessen kann was zumindest grundsaetzlich in meinem Programm falsch sein koennte, wenn diese nicht ausfuehrbar ist.
Und genau da liegst du falsch. Grob gesagt werden die Funktionen immer allgemeiner, je tiefer du ins System hinabsteigst. Wenn du dich also bis in die letzte Funktion vertiefst, die du mit dem Debugger noch als Sourcecode erfassen kannst, bist du an einer Stelle angelangt, die für die Fehlerdiagnose absolut ungeeignet ist.
Die Fehlermeldung die das Programm produziert hat war die absolut Debug-Modus-Typische "fehler in wincore.cpp zeile xy" und ich hielt es fuer unnoetig das aufzufuehren.
Auch hier liegst du falsch. Nur weil dir diese Fehlermeldung nichts sagt, heißt das nicht, dass das für alle hier gilt. Wenn du mal in Zeile xy schaust (wincore.cpp sollte in den MFC-Sourcen zu finden sein), steht da vielleicht sogar ein Kommentar, der auf eine mögliche Fehlerursache hinweist.
es lag an einem Button der faelschlicherweise in den View-Klasse war und in der OnInitialUpdate Created wurde was wohl bei der Neukonstruktion zu Problemen fuehrte (ich wusste halt nicht genau ob die View neu erzeugt wird und ob OnInitialUpdate neu aufgerufen wird wenn man ein neues Dokument anlegt).
Du kannst dir sicher sein, dass niemand das aus den Informationen hätte herauslesen können, die du im ersten Beitrag geliefert hast.
-
MFK schrieb:
Die Fehlermeldung die das Programm produziert hat war die absolut Debug-Modus-Typische "fehler in wincore.cpp zeile xy" und ich hielt es fuer unnoetig das aufzufuehren.
Auch hier liegst du falsch. Nur weil dir diese Fehlermeldung nichts sagt, heißt das nicht, dass das für alle hier gilt. Wenn du mal in Zeile xy schaust (wincore.cpp sollte in den MFC-Sourcen zu finden sein), steht da vielleicht sogar ein Kommentar, der auf eine mögliche Fehlerursache hinweist.
Die Codestelle in der wincore hat er ja gepostet...
MFK schrieb:
es lag an einem Button der faelschlicherweise in den View-Klasse war und in der OnInitialUpdate Created wurde was wohl bei der Neukonstruktion zu Problemen fuehrte (ich wusste halt nicht genau ob die View neu erzeugt wird und ob OnInitialUpdate neu aufgerufen wird wenn man ein neues Dokument anlegt).
Du kannst dir sicher sein, dass niemand das aus den Informationen hätte herauslesen können, die du im ersten Beitrag geliefert hast.
Er hats, wie er schreibt, selbst gerade erst rausgefunden...
-
das_brot schrieb:
Die Codestelle in der wincore hat er ja gepostet...
Ich glaube nicht, das er die Zeile gezeigt hat, die in der Fehlermeldung stand. Selbst wenn sie es gewesen wäre, hat er es nicht gesagt.
MFK schrieb:
Er hats, wie er schreibt, selbst gerade erst rausgefunden...
Das ist mir klar. Aber er war offenbar der Ansicht, dass jemand das aus den Informationen, die er geliefert hat, hätte ablesen können.
-
MFK schrieb:
das_brot schrieb:
Die Codestelle in der wincore hat er ja gepostet...
Ich glaube nicht, das er die Zeile gezeigt hat, die in der Fehlermeldung stand. Selbst wenn sie es gewesen wäre, hat er es nicht gesagt.
DerGhost schrieb:
Intensives Debuggen in die innereien der MFC hinein fuehrt bis zu einem Punkt in der wincore.cpp
//...
und bei AfxCallWndProc ist Schluss.
MFK schrieb:
das_brot schrieb:
Er hats, wie er schreibt, selbst gerade erst rausgefunden...
Das ist mir klar. Aber er war offenbar der Ansicht, dass jemand das aus den Informationen, die er geliefert hat, hätte ablesen können.
OK.
Edit: Quote Tags
-
Jetzt hoert auf euch zu zanken das Problem ist ja wie gesagt geloest und dass meine Anfrage haette etwas durchdachter sein koennen seh ich ja ein - aber mir misfiel eigentlich nicht die Antwort an sich sondern nur der Stil, ich find man haette sachlicher nachbohren koennen als mir zu erklaeren, dass das Problem mit hoher Wahrscheinlichkeit nicht an der MFC sondern an meinem Code liegt.
Jedenfalls Danke, zumindest werd ich beim naechsten Mal vorsichtiger posten