none
为何VS .Net 2005总是在调试时莫名其妙的出现:"无法找到MFC80D.DLL..." RRS feed

  • 问题

  • 为何VS .Net 2005总是在调试时莫名其妙的出现:"无法找到MFC80D.DLL..."             VC6工程,经转换并编译成功,第一次Debug运行正常,在查看对话框资源时,一不小心移动了一个按钮位置,重新编译,便弹出如上对话框,如果改用 Release模式编译则运行正常.清理一下解决方案,再重新用Debug模式编译,运行还是如此,换个其他的V6工程,转换后用Debug模式编译运行又正常.这到底是什么原因,真的是我的VC 2005没安装好?????另:我的系统是XP_SP2,内存 1G,CPU P4,在XP系统目录:WINSXS中可找到MFC80D.DLL和其它动态链接库,在VS 2005的安装目录:\VC\redist内也有MFC80D.DLL,把这些动态链接库拷到工程目录里,运行依然出错:似乎是清单文件出错,但项目属性中的链接器已经设置生成清单文件了,如果说程序有BUG,但在VC6环境下一切正常!真有点摸不清头脑.BUG是不是如下两个警告产生的?
    e:\my documents\visual studio 2005\projects\vcface\vcface.cpp(52) : warning C4996: 'CWinApp::Enable3dControls' was declared deprecated
            e:\vs2005\vc\atlmfc\include\afxwin.h(4471) : see declaration of 'CWinApp::Enable3dControls'
            Message: 'CWinApp::Enable3dControls is no longer needed. You should remove this call.'
    VCFaceDlg.cpp
    e:\my documents\visual studio 2005\projects\vcface\vcfacedlg.cpp(86) : warning C4996: 'strcpy' was declared deprecated
            e:\vs2005\vc\include\string.h(73) : see declaration of 'strcpy'
            Message: 'This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
    将Enable3dControls注释掉,把strcpy改成strcpy_s后,错误依然故我.
    输出窗口显示如下:

    “VCFace.exe”: 已加载“E:\My Documents\Visual Studio 2005\Projects\vcface\Debug\VCFace.exe”,已加载符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”,未加载任何符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\kernel32.dll”,未加载任何符号。
    “VCFace.exe”: 已加载“E:\My Documents\Visual Studio 2005\Projects\vcface\Debug\mfc80d.dll”,已加载符号。
    “VCFace.exe”: 已加载“E:\My Documents\Visual Studio 2005\Projects\vcface\Debug\msvcr80d.dll”,已加载符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\msvcrt.dll”,未加载任何符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\gdi32.dll”,未加载任何符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\user32.dll”,未加载任何符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\shlwapi.dll”,未加载任何符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\advapi32.dll”,未加载任何符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\rpcrt4.dll”,未加载任何符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\oleaut32.dll”,未加载任何符号。
    “VCFace.exe”: 已加载“C:\WINDOWS\system32\ole32.dll”,未加载任何符号。
    VCFace.exe 中的 0x7c92eae0 处最可能的异常: 0xC0000005: 读取位置 0x00000130 时发生访问冲突
    R6034
    An application has made an attempt to load the C runtime library without using a manifest.
    This is an unsupported way to load Visual C++ DLLs. You need to modify your application to build with a manifest.
    For more information, see the "Visual C++ Libraries as Shared Side-by-Side Assemblies" topic in the product documentation.
    Windows 已在 VCFace.exe 中触发一个断点。

    其原因可能是堆被损坏,这也说明 VCFace.exe 中或它所加载的任何 DLL 中有 bug。

    输出窗口可能提供了更多诊断信息
    VCFace.exe 中的 0x7c984ed1 处最可能的异常: 0xC0000142: DLL Initialization Failed
    VCFace.exe 中的 0x7c984ed1 处未处理的异常: 0xC0000142: DLL Initialization Failed

    真心盼望有经验的高手帮忙,不吝赐教,谢谢
    2007年8月10日 7:32

答案

  • Visual Studio 2005用向导生成的项目,在运行时可能会遇到找不到MFC80UD.dll的问题。这个问题可能是Manifest 引起的,因此我们可以通过修改项目属性(properties)->清单工具(property pages)->链接(linker)-->manifest file -->Allow Isolation,把“嵌入清单”选“否”,.然后编译、链接、运行即可。
    2007年8月10日 8:33

全部回复

  • Visual Studio 2005用向导生成的项目,在运行时可能会遇到找不到MFC80UD.dll的问题。这个问题可能是Manifest 引起的,因此我们可以通过修改项目属性(properties)->清单工具(property pages)->链接(linker)-->manifest file -->Allow Isolation,把“嵌入清单”选“否”,.然后编译、链接、运行即可。
    2007年8月10日 8:33
  • 在头文件中加入如下声明即可

    #pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")

    2007年9月4日 7:17
  •  

    我也遇到了这个问题,解决方法是:在“属性->配置属性->清单工具->常规“下有一个”使用FAT32解决办法,把它选成是,就可以了。据说原因是vs2005采用了新的dll方案,而对于fat32格式下支持有问题
    2008年1月26日 8:52