jasso Geschrieben 21. Oktober 2003 Teilen Geschrieben 21. Oktober 2003 tachtach ich hab wiedermal ein kleines Problem mit meinem MDI-Fenster in VS6.0. Es muss doch möglich sein Werte von der CMainFrame (von CMDIFrameWnd abgeleitet) in die untergeordneten Fenster (von CFormView abgeleitet) zu übergeben ohne dabei globale Variablen verwenden zu müssen. Bis jetzt habe ich das ganze mit globalen Variablen geregelt. Das problem an der sache ist dass ich Fehler beim includieren erzeuge, und das nicht gerade wenige (er kompilliert mir komischerweise trotzdem fertig). Ein weitere problem mit den globalen Variablen (eigentlich das Hauptproblem) is dass er mir, wenn ich das Prog schließe folgenden Fehler bringt: File: dbgheap.c Line: 1017 Expression: _BLOCK_TYPE_IS_VAILD(pHead->nBlockUse) (kommt nicht so gut wenn ich des drin lasse!!!) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Oktober 2003 Teilen Geschrieben 21. Oktober 2003 Du kannst mit CWinApp::GetFirstDocTemplatePosition/GetNextDocTemplate durch alle Dokument-Templates der Anwendung gehen, dann mit CDocTemplate::GetFirstDocPosition/GetNextDoc durch alle Dokumente dieses Templates, und schließlich mit CDocument::GetFirstViewPosition/GetNextView durch alle Views dieses Dokuments gehen. Du kommst also mit einer dreifach verschachtelten Schleife an alle Views. Wenn du nur ein Template hast, kannst du die äußerste weglassen. Original geschrieben von jasso File: dbgheap.c Line: 1017 Expression: _BLOCK_TYPE_IS_VAILD(pHead->nBlockUse) Das ist ein ernstes Problem, und liegt nicht allein daran, dass du globale Variablen verwendest. Vermutlich schreibst du irgendwo über Arraygrenzen hinweg. Such nach Arrays, die auf dem Heap/Freispeicher angelegt werden (mit new/malloc) und prüfe genau, ob du nicht über den allokierten Bereich hinaus schreibst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jasso Geschrieben 21. Oktober 2003 Autor Teilen Geschrieben 21. Oktober 2003 :confused: Verwirrt!!!:confused: irgendwie habe ich das Gefühl dass mir der Aufbau einer MDI-Anwendung nicht ganz so klar is wie ich bisher gedacht habe. ok. ich habe alle stufen durchlaufen CWinApp::GetFirstDocTemplatePosition/GetNextDocTemplate CDocTemplate::GetFirstDocPosition/GetNextDoc CDocument::GetFirstViewPosition/GetNextView und erhalte am ende einen CView*. allerdings kann ich diesen nicht in eine meiner von CFormView abgeleiteten klassen konvertieren (was ja meiner meinung nach notwendig ist um auf die Membervariablen zugriff zu haben). Wiso geht das nicht? wo doch die klassenhirarchie es erlauben müsste: CWnd --> CView --> CScrollView --> CFormView Original geschrieben von Klotzkopp Das ist ein ernstes Problem, und liegt nicht allein daran, dass du globale Variablen verwendest. Vermutlich schreibst du irgendwo über Arraygrenzen hinweg. Such nach Arrays, die auf dem Heap/Freispeicher angelegt werden (mit new/malloc) und prüfe genau, ob du nicht über den allokierten Bereich hinaus schreibst. Ich verwende im gesamten programm nur einen Array mit fünf Bitmaps drin. Habe ihn mir zwar trotzdem angeschaut aber definitiv keinen Fehler entdeckt. das einzige was ich auf den Heap-Speicher erzeuge sind meine Exception-Klassen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Oktober 2003 Teilen Geschrieben 21. Oktober 2003 Original geschrieben von jasso und erhalte am ende einen CView*. allerdings kann ich diesen nicht in eine meiner von CFormView abgeleiteten klassen konvertieren (was ja meiner meinung nach notwendig ist um auf die Membervariablen zugriff zu haben). Wiso geht das nicht?Wenn du nur eine Viewklasse hast, kannst du den Zeiger einfach mit static_cast umwandeln: CDeineViewKlasse* p = static_cast<CDeineViewKlasse*>(pZeigerVonGetNextView); Wenn du mehrere Viewklassen hast, musst du den Typ mit dynamic_cast ermitteln: CDeineViewKlasse1* p = dynamic_cast<CDeineViewKlasse1*>(pZeigerVonGetNextView); if(NULL != p) { // es ist ein CDeineViewKlasse1... p->MemberFunktion(); } else { // andere Viewklassen testen }[/code] Damit dynamic_cast funktioniert, musst du in den Projekteinstellungen RTTI aktivieren. [b]Ich verwende im gesamten programm nur einen Array mit fünf Bitmaps drin. Habe ihn mir zwar trotzdem angeschaut aber definitiv keinen Fehler entdeckt. das einzige was ich auf den Heap-Speicher erzeuge sind meine Exception-Klassen. [/b]Enthalten die irgendwelche Arrays? Oder verwendest du selbstgeschriebene DLLs? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Oktober 2003 Teilen Geschrieben 21. Oktober 2003 Nachtrag: Trifft das vielleicht auf dich zu? http://support.microsoft.com/support/kb/articles/q154/7/44.asp Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jasso Geschrieben 21. Oktober 2003 Autor Teilen Geschrieben 21. Oktober 2003 :uli die konvertierung schluckt er und kompilliert fertig. jetzt hab ich allerdings das problem dass er mir bei CDocTemplate::GetFirstDocPosition keinen wert zurückgibt, obwohl ich doch eigentlich ein Document drin haben müsste (Es wird mir ja angezeigt!!!) CDocTemplate *pTemp; CDocument *pDoc; CView *View; CBenutzereinstellungen *benutzer; POSITION pos; if(pos = app->GetFirstDocTemplatePosition()) { pTemp = app->GetNextDocTemplate(pos); [COLOR=red][COLOR=blue]if[/COLOR](pos = pTemp->GetFirstDocPosition())[/COLOR] { pDoc = pTemp->GetNextDoc(pos); [COLOR=blue]if[/COLOR]((pos = pDoc->GetFirstViewPosition()) { View = pDoc->GetNextView(pos); benutzer = [COLOR=blue]static_cast[/COLOR]<CBenutzereinstellungen*>(View); benutzer->m_BenutzerID = 1; } } pTemp->OpenDocumentFile(NULL); } die View-Klasse wurde auch in der Applikationsklasse sauber eingefügt: CMultiDocTemplate* pNewDocTemplate = [COLOR=blue]new[/COLOR] CMultiDocTemplate( IDR_BENUTZEREINSTELLUNGEN_TMPL, RUNTIME_CLASS(CPETDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CBenutzereinstellungen)); AddDocTemplate(pNewDocTemplate); Wie kann es sein dass er mir trotzdem kein Dokument findet? Original geschrieben von Klotzkopp Trifft das vielleicht auf dich zu? http://support.microsoft.com/suppor...s/q154/7/44.asp Also die Fehlermeldung is die selbe. Werd ich mir auf jeden fall zu gemüt führen. DANKE Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Oktober 2003 Teilen Geschrieben 21. Oktober 2003 Original geschrieben von jasso Wie kann es sein dass er mir trotzdem kein Dokument findet? Wo steht denn dieser Code? Kann es sein, dass dein Dokument erst durch den Aufruf von OpenDocumentFile erstellt wird? Der steht ja dahinter... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jasso Geschrieben 21. Oktober 2003 Autor Teilen Geschrieben 21. Oktober 2003 :uli ich könnt dich :hodata knutschen!!!!!!!!!!! vielen dank für die mühe!!!!!!!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.