VS 2013: mfc71.dll error



  • Hallo *,

    ich portiere ein umfangreiches Projekt von VS 2003 -> VS 2013. Ich habe alle Module syntaxmäßig korrekt kompiliert. Während des Debugens erhalte ich sofort in ::InitInstance() folgende Fehlermeldung:
    Unhandled exception at 0x7C172FAF (mfc71.dll) in ...name.exe:
    0xC0000005: Access violation reading location 0x00000000.

    Für jeden Rat bin ich dankbar!
    Danke,
    Václav



  • Deine Programm-Datei, die Du mit VS2013 gebaut hast, sollte ja wohl eher gegen "mfc120u.dll" linken.

    Kann es sein, dass Du irgendwie immer noch gegen die "alte" MFC DLL (VS 2003) linkst, aber deine Code mit den "aktuellen" Header Files (VS2013) übersetzt?

    Das kann ja nur krachen...



  • Hallo DeathCubeK,

    wie kann ich die mfc120.dll explizit linken? Ich finde in dem Riesenprojekt keine mfc... Verweise.

    Danke,
    Václav


  • Mod

    Nimm erst mal Depends und suche welche Komponente diese DLL möchte.
    Evtl. hast Du eine alte DLL im Betrieb, die diese DLL gelinkt hat.

    Ansonsten wird durch Kompilieren mit dem neuen VS alles "explizit" auf die neuen DLs gelinkt.

    Wenn Du einen alten Verweis hast, dann hast Du eine Komponente, die eben nicht umgestellt wurde,



  • Hallo Martin,
    leider habe ich noch andere Probleme. Während der Portierung habe ich das Projekt unter VS 2013 (sinngemäß wie unter VS 2003) wie folgt kompiliert:
    Native Only
    Release
    Win32

    In den Properties habe ich in Debugging - Generate Debug Info Yes (/Debug)
    angegeben.

    Nach Erreichen eines Break Point und Eingabe von SHIFT F9 (auf einer globalen Variablen):
    Spalte Name: roter Kreis mit einem weißen x.
    Spalte Value: <Unable to read memory>.
    Spalte Type: kein Eintrag.

    Ich muss unbedingt die Variableninhalte prüfen. Was kann ich tun, um das Verhalten wie unter VS 2003 zu erreichen?

    Danke, Václav


  • Mod

    Da gibts keine spezielen Einstellungen, wenn Debug-Infos erzeugt warden.
    Zeige Dir mal das Debug Fenster Auto oder LOcal an.
    Was passiert, wenn Du über eine Variable mit dem Cursor fährst.

    Nur mal grundsätzlich: Ohne Breakpoint keine Anzeige...



  • Hallo Martin,

    ich deklariere eine Klassenvariable:
    class CMainFrame : public CMDIFrameWnd {
    int m_nMS6000;
    .............
    }

    In CMainFrame:
    ..............
    m_nMS6000 = 1;
    m_nTest = 23; // Breakpoint!
    ..............

    Wenn das Programm auf dem Breakpoint steht, erscheint im Debug Fenster Auto und Local : m_nMS6000 0x1fefa84
    Wenn ich über die Variable mit dem Cursor fahre, erscheint derselbe (unsinnige) Wert.

    Danke, Václav


  • Mod

    Debug oder Release mode?
    Wenn ich eines Deiner vorherigen Postings richtig sehe, debuggst Du im Release Mode. Hier kann es durch die vorhandenen Optimierungen dazu kommen, dass die Symbole und Werte nicht richtig angezeigt werden.

    Hast Du das Verhalten auch im Debug-Build?

    Oder gibt es einen anderen Thread der hier was macht?



  • Hallo Martin,

    die beschriebenen Effekte treten im Release mode auf.
    Wenn ich die Solution im Debug mode kompiliere, erhalte ich:
    1>.\OPCCommunicator.idl(17): error MIDL2311: statements outside library block are illegal in mktyplib compatability mode : [ Interface 'ICoKonfiguration' ]
    1>.\OPCCommunicator.idl(17): error MIDL2096: duplicated attribute : [helpstring] [ Interface 'ICoKonfiguration' ]
    1>.\OPCCommunicator.idl(17): error MIDL2096: duplicated attribute : [uuid] [ Interface 'ICoKonfiguration' ]

    Die Ursache für die oben aufgeführten Meldungen kann ich mit meinem Kenntnisstand nicht finden.

    Danke, Václav


Anmelden zum Antworten