Filou Geschrieben 5. Mai 2006 Geschrieben 5. Mai 2006 Hi, mein Programm stürtzt beim öffnen eines neuen Dialogs ab und ich kann mir nicht erklären wieso. Es ging die ganze Zeit. Hab ein Haltepunkt bei OnInitDialog gesetzt, aber das wird erst garnicht erreicht. Das hier ist die Absturzstelle aber das sagt mir garnix: if (hWndCtrl == NULL) { TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC); ASSERT(FALSE); Könnt Ihr mir weiterhelfen? Woran könnte es liegen? Gruß, Filou Zitieren
Klotzkopp Geschrieben 5. Mai 2006 Geschrieben 5. Mai 2006 Das hier ist die Absturzstelle aber das sagt mir garnix:Es wäre sehr hilfreich gewesen, wenn du dazu geschrieben hättest, in welcher Datei bzw. Funktion dieser Code steht. Ich vermute, du hast in deiner DoDataExchange-Methode einen Datenaustauschbefehl für ein Steuerelement, das nicht (mehr) da ist. Zitieren
Filou Geschrieben 5. Mai 2006 Autor Geschrieben 5. Mai 2006 Oh Sorry!! Es steht in der Datei dlgdata.cpp Line: 43 Die Funktion heißt: HWND CDataExchange::PrepareCtrl(int nIDC) Wi egehe ich jetzt vor? Soll ich alle Steuerelemente aus dem Dialog löschen? Ich kanns mir nicht erklären. habe nämlich eigentlich nix geändert. Kann ich irgendwie sehen an welchem Steuerelement das liegt? Zitieren
Klotzkopp Geschrieben 5. Mai 2006 Geschrieben 5. Mai 2006 Soll ich alle Steuerelemente aus dem Dialog löschen?Nein. Ich kanns mir nicht erklären. habe nämlich eigentlich nix geändert.Jaja, das kenn' ich Kann ich irgendwie sehen an welchem Steuerelement das liegt?Ja. Wenn du das Programm im Debugger startest, kannst du in der Ausgabe die Trace-Meldung TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);sehen. Da drin steht die ID des Steuerelements, das an dem Ärger schuld ist. Du kannst dir auch nIDC auch einfach im Debugger ansehen. In der resource.h kannst du die symbolische Konstante für diese Zahl raussuchen. Zitieren
Filou Geschrieben 5. Mai 2006 Autor Geschrieben 5. Mai 2006 Ok, ok... ich hab doch was gemacht. Lag an einem Static das bei doppelklick eine Funktion aufruft. Die hatte ich umbenannt. Habs nicht gleich gem,erkt weil ich in der zwischenzeit weiter programmiert hatte Ich schäme mich auch :hells: Danke Dir!! Zitieren
registrierenFürNDokument Geschrieben 11. August 2010 Geschrieben 11. August 2010 (bearbeitet) Ich hab den selben Fehler auch - ich hab bereits die komplette Klasse und Listview neu erstellt (mit dem Klassenassisstent, danach die alten Methoden etc. reinkopiert), wenn ich im Resource-Editor auf das Fenster klicke springt er auch korrekt in meinen Quelltext, daran liegts also nicht. Ich hab bereits mit den .rc-Dateien herumgespielt aber daran kann es auch nicht liegen wiel Einzig und Allein die Listview spinnt, alles andere funktioniert perfekt. Spaßeshalber hab ich meiner IDC_LIST1 mal die Zahl 4711 gegeben - keine Änderung ... hat jemand Vorschläge? Infos : die Klasse die die Resource "haben" soll ist abgleitet von CDialogExdie resource selbst : IDD_MEINWINDOW DIALOGEX 0, 0, 317, 196 STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_NOPARENTNOTIFY | WS_EX_APPWINDOW CAPTION "Mein Titel hier" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN CONTROL "Info-Meldungen",IDC_INFO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,6,67,10 CONTROL "Warnungen",IDC_WARNING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,90,6,53,10 CONTROL "Fehlermeldungen",IDC_ERROR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,6,71,10 CONTROL "DEBUG",IDC_DEBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,270,6,36,10 CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,6,18,306,174 ENDKlassendeklaration = Standard, vom Klassenassistenten über den Resource-EditorMembervariable für das ClistCtrl = erstellt und als private in der Klasse Lag an einem Static das bei doppelklick eine Funktion aufruft. Die hatte ich umbenannt. Was? Kannst du das (falls du hier noch aktiv bist) mal erläutern? Was hast du damals gemacht VOR und NACH dem Fehler? Bearbeitet 11. August 2010 von registrierenFürNDokument Weil? Zitieren
registrierenFürNDokument Geschrieben 11. August 2010 Geschrieben 11. August 2010 (...) Das Problem ist behoben, die Ursache war folgende : Ich erstelle in einer Dummy-Klasse (erbt von CWnd) beliebig viele CDialogs (eigentlich CDialogEx) - es wird somit eine Resource (die eines kompletten Fensters) "aktiviert" und angezeigt die nicht immer (bisher : überhaupt nicht) den selben Inhalt hat - manche habe Listviews, andere wiederum nicht; ausserdem gilt die ID für meine listview sowieso nur für eine einzige Instanz, ist ja logisch - soweit war ich auch schon . Das Problem ist nun dass die Entität, die beim Laden / Erstellen einer Resource (Ich mach es direkt in CDialog::Create) im RAM erstellt wird auch erst wirklich DANN existiert wenn der entspr. Punkt im übersetzten Quelltext erreicht ist - bei mir kann das zu einer beliebigen Zeit sein, nicht unbedingt nach dem Start der App. Erst wenn diese Entität im RAM liegt (daher : wenn der CDialog auch wirklich Create() erreicht) ist die listview gültig ... die komplette Control-resource ist also abhängig von Laufzeitcode .... das finde ich persönlich sehr seltsam aber nun gut Zitieren
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.