Note: Forums will be making significant UX changes to address key usability improvements surrounding search, discoverability and navigation. To learn more about these changes please visit the announcement which can be found HERE.

已锁定 VS2010 Run-time Error

  • Wednesday, August 25, 2010 6:25 PM
     
     

    Hello,

    I am developing an MFC application using VS2010.
    However, I get a run-time error, when I build the
    application on a different computer.

    Scenario 1:
      Computer A: WinXp
         Builds and Runs OK.
      Computer B: Runs OK.

    Scenario 2:
      Computer B: Windows 7
         Builds OK.
         Run Fails (Run-time Error)

    Error Message:
    File f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\filelist.cpp
    Line:255
     
    BTW, I don't have an "f:" drive on either computer?

    How can I check the "global" VS2010 settings?
    So, that I can try and compare the settings from both
    computers.

    TIA,
    jrcii

    • Edited by jrcii Wednesday, August 25, 2010 6:57 PM
    •  

All Replies

  • Wednesday, August 25, 2010 6:55 PM
     
     

    you can ignore the fact that the path shows "f:".  That's just a side-effect of how the Visual C++ team builds their libraries before shipping them.  It's actually the path to where the source files were located when the DLLs were built.  The actual source code is at

    C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc

    (or Program Files (x86) on a 64 bit machine)

    Now to your problem.  I believe if you look around 255 of filelist.cpp you can see it's related to the new handling of the IShellItem handling for Windows 7 (recent file list using SHAddToRecentDocs) but it's hard to tell for sure.   I would need to see the values in a debugger, also showing the stack at the time of failure.

  • Wednesday, August 25, 2010 7:23 PM
     
     

    Hello Ted,

    Thank you for replying to my posting

    -------------------------

    CallStack


    MyApp.exe!CRecentFileList::Add(const char * lpszPathName, const char * lpszAppID)  Line 225 + 0x25 bytes C++
    MyApp.exe!CWinApp::AddToRecentFileList(const char * lpszPathName)  Line 84 C++
    MyApp.exe!CDocument::SetPathName(const char * lpszPathName, int bAddToMRU)  Line 296 C++
    MyApp.exe!CSingleDocTemplate::OpenDocumentFile(const char * lpszPathName, int bAddToMRU, int bMakeVisible)  Line 197 C++
    MyApp.exe!CDocManager::OpenDocumentFile(const char * lpszFileName, int bAddToMRU)  Line 1068 C++
    MyApp.exe!CDocManager::OpenDocumentFile(const char * lpszFileName)  Line 977 C++
    MyApp.exe!CWinApp::OpenDocumentFile(const char * lpszFileName)  Line 90 C++
    MyApp.exe!CWinApp::ProcessShellCommand(CCommandLineInfo & rCmdInfo)  Line 43 + 0x1c bytes C++
    MyApp.exe!CMainApp::InitInstance()  Line 89 + 0xc bytes C++
    MyApp.exe!AfxWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow)  Line 37 + 0xd bytes C++
    MyApp.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow)  Line 26 C++
    MyApp.exe!__tmainCRTStartup()  Line 275 + 0x2c bytes C
    MyApp.exe!WinMainCRTStartup()  Line 189 C

    ------------------------

    Auto variables

    &psi 0x0036f0a4 {0x00000000} ATL::CComPtr<IShellItem> *
    IID_IShellItem {IID_IShellItem} _GUID
    afxGlobalData {m_bUseSystemFont=0 m_bInSettingChange=0 hbrBtnHilite=0x01100075 ...} AFX_GLOBAL_DATA
    hr 0x80070002 The system cannot find the file specified.  HRESULT
    this 0x00246768 {m_nSize=4 m_arrNames=0x002467cc "D:\MyApp\$1" m_strSectionName="Recent File List" ...} CRecentFileList * const
    __vfptr 0x016a0580 const CRecentFileList::`vftable' *
    m_nSize 4 int
    m_arrNames 0x002467cc "D:\MyApp\$1" ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > > *
    m_strSectionName "Recent File List" ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >
    m_strEntryFormat "File%d" ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >
    m_nStart 0 unsigned int
    m_nMaxDisplayLength 30 int
    m_strOriginal "" ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >

    -------------------------------------

    When, I don't pass in a file name (in the debugger) the program runs OK.
    Unfortunately, I need to pass in a file name.

    How do I disable the MRU stuff?

    jrcii

  • Wednesday, August 25, 2010 9:54 PM
     
     Answered

    Hello

    I solved the problem. I created a "Dummy" MFC application.
    I copied the ::InitInstance from the "Dummy" application to
    My Application, and the problem was resolved.

    I am not sure, what was wrong with the ::InitInstance that I was
    using initially?

    jrcii

    • Marked As Answer by jrcii Wednesday, August 25, 2010 9:54 PM
    •  
  • Tuesday, September 21, 2010 5:14 PM
     
     

    Hi

     

    I have the same problem now, my application can run without this error on XP, but on Windows 7.

    What i found is if no chinese charactors in  my full file's path name it works fine. When i trace into that listfile.cpp file, i found after A2W, the chinese charactors in my path name crushed, and after this, that error happens.

    Is something wrong with A2W on Windows 7.

     

    I did something like Jrcii, but it didn't help.

     

    Chen

  • Thursday, November 04, 2010 5:56 AM
     
     

    Hmmm... they have bugs everywhere...

    Do this, just before your CWinApp::InitInstance(); put a CoInitialize(NULL);

    Really scares me when they missed that kind of thing...