Benutzer mit den meisten Antworten
Absturz in CMFCToolBarsCustomizeDialog::Create

Frage
-
Ein komisches Phänomen ist bei mir aufgetreten: Wenn ich den "Customize"-Dialog des MFC Feature Packs aufrufen möchte, bekomme ich in der Create-Methode einen Absturz. Der Code sieht folgendermaßen aus:
CMFCToolBarsCustomizeDialog* pDlgCust = new CMFCToolBarsCustomizeDialog( this, TRUE /* Menüs überprüfen */ ); pDlgCust->EnableUserDefinedToolbars(); pDlgCust->Create();
Das passiert auf einem Rechner mit englischen Visual Studio 2010 Prof. und Service Pack 1 Beta. Auf einem Rechner mit deutschem Studio ohne das Service Pack ist alles in Ordnung, d.h. es gibt keinen Absturz und der Dialog funktioniert wie gewünscht. Ich habe das mit verschiedenen Beispielen ausprobiert. Verfolgt man den CallStack, dann sieht man, dass er bis zur Methode DestroyPropertySheetPage() in der comctl32.dll reicht. Das Verhalten ist bei XP und Windows 7 identisch. Leider habe ich zu diesem Punkt im Internet noch nichts gefunden.
Christoph Hermanns, Nürnberg
Antworten
-
Auch wenn der Thread nun schon etwas älter ist, möchte ich nur kurz mitteilen, dass sich das Problem mit der Installation des SP1 gelöst hat. Ich vermute, dass meine Installation die Probleme verursacht hat. Trotzdem vielen Dank für die Hilfe, Martin.
Christoph Hermanns, Nürnberg- Als Antwort markiert Martin RichterModerator Montag, 5. Dezember 2011 13:50
Alle Antworten
-
-
Leider kommt der Absturz immer. Es handelt sich um eine "unbehandelte Win32-Ausnahme". In der Methode PropertySheet::OnInitDialog() wird CWnd::Default() aufgerufen. Diese scheitert dann in CWnd::DefWindowProc... Auf diesem Rechner hat das übrigens auch mal funktioniert. Die damals erstellte Release Version des Programms stürzt an dieser Stelle nun aber auch ab. Und in diesem Programm wurde nur der vom Anwendungsassistenten erzeugte Code verwendet. Ich denke, dass das seit der Installation des Service Packs nicht mehr funktioniert. Ich kann das aber nicht 100%ig sagen...
Christoph Hermanns, Nürnberg -
-
Die Nachricht hat den Wert nMsg==272. Der Callstack sieht folgendermaßen aus:
comctl32.dll!DllInstall() + 0x1671 Bytes
[Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für comctl32.dll]
> comctl32.dll!DestroyPropertySheetPage() + 0xd1 Bytes
comctl32.dll!DestroyPropertySheetPage() + 0x1d4 Bytes
comctl32.dll!CreatePropertySheetPage() + 0x20f1 Bytes
comctl32.dll!CreatePropertySheetPage() + 0x3c95 Bytes
comctl32.dll!CreatePropertySheetPage() + 0x4825 Bytes
user32.dll!GetDC() + 0x6d Bytes
user32.dll!DefDlgProcW() + 0x402 Bytes
user32.dll!EnumDisplaySettingsA() + 0xc9 Bytes
user32.dll!DefDlgProcW() + 0x22 Bytes
user32.dll!GetDC() + 0x6d Bytes
user32.dll!GetDC() + 0x14f Bytes
user32.dll!IsWindowUnicode() + 0xa1 Bytes
user32.dll!CallWindowProcW() + 0x1b Bytes
mfc100ud.dll!CWnd::DefWindowProcW(unsigned int nMsg=272, unsigned int wParam=330860, long lParam=1662112) Zeile 1089 + 0x20 Bytes C++
mfc100ud.dll!CWnd::Default() Zeile 291 C++
mfc100ud.dll!CPropertySheet::OnInitDialog() Zeile 1389 + 0x8 Bytes C++
mfc100ud.dll!CMFCToolBarsCustomizeDialog::OnInitDialog() Zeile 756 + 0xb Bytes C++
Christoph Hermanns, Nürnberg -
Hallo Christoph!
comctl32.dll!DestroyPropertySheetPage() + 0xd1 Bytes
Das macht mich stutzig.
Wenn das auch im Debugger passiert, schau mal in die Debug-Ausgabe.Kann es sein, das ein Control nicht richtiog erzeugt wird und das Property Sheet aus dem Grund zerstört wird (während der Erzeugung) ?
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de -
Auch wenn der Thread nun schon etwas älter ist, möchte ich nur kurz mitteilen, dass sich das Problem mit der Installation des SP1 gelöst hat. Ich vermute, dass meine Installation die Probleme verursacht hat. Trotzdem vielen Dank für die Hilfe, Martin.
Christoph Hermanns, Nürnberg- Als Antwort markiert Martin RichterModerator Montag, 5. Dezember 2011 13:50