Nicht modaler Dialog: Absturz in UpdateData, weil Control nicht gefunden



  • Hallo zusammen,

    ich muss einen bisher funktionierenden Dialog von modal zu nicht modal ändern.
    Leider stürzt er nun aus obigem Grund ab.

    Der alte Quellcode (funktioniert):

    CDialogBarcodeStart* pBarcodeStart;
           	pView->InvalidateRect(NULL,TRUE);
            pBarcodeStart = new CDialogBarcodeStart(csBarcodeLabelsFile, m_wOldChargeNr, wMaxCnt, pAnlage, pAnlage->m_wAnzahlWagen, theApp.m_pMainWnd);
            if(pBarcodeStart->DoModal() == IDOK) {
    

    der neue Quellcode (Absturz):

    CDialogBarcodeStart* pBarcodeStart;
            pBarcodeStart = new CDialogBarcodeStart(csBarcodeLabelsFile, m_wOldChargeNr, wMaxCnt, pAnlage, pAnlage->m_wAnzahlWagen, theApp.m_pMainWnd);
            pBarcodeStart->Create(MAKEINTRESOURCE(IDD_DIALOG1), theApp.m_pMainWnd);
            pBarcodeStart->ShowWindow(SW_SHOW);
    

    Das UdateData(FALSE) wird in der CDialog::OnInitDialog(), in dlgcore.cpp, aufgerufen.
    Und Ganze passiert in der Create-Methode, oben.

    Hat jemand eine Idee, bitte!

    Grüsse
    Helmut


  • Mod

    Und wo stürzt was ab?
    Callstack sieht wie aus?



  • Sorry, ich konnte nicht früher.

    Die Anwendung stürzt in der Create-Methode ab.

    Der Call-Stack sieht folgendermassen aus:
    Also ab dem Aufruf von Create(..)

    mfc80ud.dll!CDataExchange::PrepareCtrl(int nIDC=1358) Line 42 + 0x14 bytes C++
    mfc80ud.dll!DDX_Control(CDataExchange * pDX=0x0018e8b0, int nIDC=1358, CWnd & rControl={...}) Line 640 C++
    Titan2.exe!CDialogBarcodeStart::DoDataExchange(CDataExchange * pDX=0x0018e8b0) Line 56 C++
    mfc80ud.dll!CWnd::UpdateData(int bSaveAndValidate=0) Line 3954 C++
    mfc80ud.dll!CDialog::OnInitDialog() Line 737 + 0xa bytes C++
    Titan2.exe!CBaseDialog::OnInitDialog(int bUserFont=0) Line 828 C++
    Titan2.exe!CDialogBarcodeStart::OnInitDialog() Line 284 C++
    mfc80ud.dll!AfxDlgProc(HWND__ * hWnd=0x001119fc, unsigned int message=272, unsigned int __formal=2361188, unsigned int __formal=2361188) Line 28 + 0x10 bytes C++
    user32.dll!759f62fa()
    [Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]
    user32.dll!75a1f9bf()
    user32.dll!75a1f8dc()
    user32.dll!75a1f765()
    ntdll.dll!773d3bda()
    user32.dll!75a1f86a()
    user32.dll!759f62fa()
    ntdll.dll!773d3bda()
    ntdll.dll!773d3bda()
    user32.dll!759f6d3a()
    ntdll.dll!773d3bda()
    ntdll.dll!773d3bda()
    user32.dll!759f6ce9()
    user32.dll!75a00d3f()
    ntdll.dll!773d3bda()
    ntdll.dll!773d3bda()
    user32.dll!75a00d65()
    ntdll.dll!773d3bda()
    mfc80ud.dll!CWnd::DefWindowProcW(unsigned int nMsg=272, unsigned int wParam=2361188, long lParam=0) Line 1029 + 0x20 bytes C++
    mfc80ud.dll!CWnd::Default() Line 274 C++
    mfc80ud.dll!CDialog::HandleInitDialog(unsigned int __formal=2361188, unsigned int __formal=2361188) Line 676 + 0x8 bytes C++
    mfc80ud.dll!CWnd::OnWndMsg(unsigned int message=272, unsigned int wParam=2361188, long lParam=0, long * pResult=0x0018ed6c) Line 2004 + 0x11 bytes C++
    mfc80ud.dll!CWnd::WindowProc(unsigned int message=272, unsigned int wParam=2361188, long lParam=0) Line 1741 + 0x20 bytes C++
    mfc80ud.dll!AfxCallWndProc(CWnd * pWnd=0x075a6178, HWND__ * hWnd=0x001119fc, unsigned int nMsg=272, unsigned int wParam=2361188, long lParam=0) Line 240 + 0x1c bytes C++
    mfc80ud.dll!AfxWndProc(HWND__ * hWnd=0x001119fc, unsigned int nMsg=272, unsigned int wParam=2361188, long lParam=0) Line 389 C++
    mfc80ud.dll!AfxWndProcBase(HWND__ * hWnd=0x001119fc, unsigned int nMsg=272, unsigned int wParam=2361188, long lParam=0) Line 411 + 0x15 bytes C++
    user32.dll!759f62fa()
    user32.dll!759f6d3a()
    user32.dll!759f6ce9()
    user32.dll!759f965e()
    user32.dll!75a2204f()
    mfc80ud.dll!wmemcpy_s(wchar_t * _S1=0x00400000, unsigned int _N1=8, const wchar_t * _S2=0x00000044, unsigned int N=1120764) Line 1233 + 0x1a bytes C++
    user32.dll!75a210b3()
    user32.dll!75a0cdc1()
    mfc80ud.dll!CWnd::CreateDlgIndirect(const DLGTEMPLATE * lpDialogTemplate=0x00cc0118, CWnd * pParentWnd=0x00ec0040, HINSTANCE
    _ * hInst=0x00400000) Line 315 + 0x2a bytes C++
    mfc80ud.dll!CDialog::CreateIndirect(const DLGTEMPLATE * lpDialogTemplate=0x00cc0118, CWnd * pParentWnd=0x00ec0040, void * lpDialogInit=0x00000000, HINSTANCE__ * hInst=0x00400000) Line 211 C++
    mfc80ud.dll!CDialog::CreateIndirect(void * hDialogTemplate=0x00cc0118, CWnd * pParentWnd=0x00ec0040, HINSTANCE__ * hInst=0x00400000) Line 188 + 0x16 bytes C++
    mfc80ud.dll!CDialog::Create(const wchar_t * lpszTemplateName=0x000000c5, CWnd * pParentWnd=0x00ec0040) Line 170 + 0x14 bytes C++


  • Mod

    Es gibt das Control mit der entsprechenden ID nicht. D.h. es ist nicht erzeugen worden.



  • Ich muss mich entschuldigen!
    Hab Mist gebaut.
    Ich habe zwar fast zwei Tage gesucht, aber leider habe ich nicht bemerkt, dass die Falsche Dialog-ID (IDD_DIALOG1) in der Anweisung stand.
    Das muss bei irgend einem Rückgängigmachen oder was weiss ich reingekommen sein.
    Entschuldigung an alle.


Log in to reply