无法注册 msvcr80.dll:An application has made an attempt to load the C runtime library incorrectly
2007-01-16 16:51 晓风残月 阅读(6508) 评论(0) 编辑 收藏 举报
今天用VC2005写了个Activex,测试部署到其他机器由于目标机器缺少msvcr80.dll和mfc80u.dll,可定是无法运行,然后就想手动注册安装msvcr80.dll和mfc80u.dll,结果两个都弹出一样的错误信息:
baidu 了一下,终于找到一个同样错误网友:http://bbs.pediy.com/showthread.php?threadid=27494
不过,也是从一个德国的牛人解释:
看来,还是用回VC6,省事一点
baidu 了一下,终于找到一个同样错误网友:http://bbs.pediy.com/showthread.php?threadid=27494
不过,也是从一个德国的牛人解释:
http://blog.kalmbachnet.de/
Using the VC 2005 shared CRT/MFC (DLL) without a manifest is not supported!
If you build your app with VC2005 and you accidently have disabled the embedding of the manifest file (or deleted the separate appname.exe.manifest file), you will get an error on XP and later!
This has to do with the checking for a valid manifest of the EXE inside the CRT/MFC DLLs “DllEntry” (via a call to _check_manifest). If the OS supports manifests (or better Side-By-Side assemblies/DLLs) the CRTs´ DLL forces the check of the EXEs´ manifest. If there is no (valid) manifest, then the DLL refuses to load (returns 0) and therefor the EXE cannot be started. It might display the following error message (or similar):
R6034
An application has made an attempt to load the C runtime library incorrectly.
Please contact the application’s support team for more information.
But in the following cases the manifest checking inside the CRT-DLL is not done:
Pre-fusion OS (FindActCtxSectionStringW not found in kernel32.dll)
Loaded by instrumented-mscoree.dll (mscoree.dll and pgort80.dll is already loaded)
The path returned with GetModuleFileNameW of the DLL is longer than 8000 characters
The path to the DLL, returned by GetLongPathName is longer than 8000 characters
Using the VC 2005 shared CRT/MFC (DLL) without a manifest is not supported!
If you build your app with VC2005 and you accidently have disabled the embedding of the manifest file (or deleted the separate appname.exe.manifest file), you will get an error on XP and later!
This has to do with the checking for a valid manifest of the EXE inside the CRT/MFC DLLs “DllEntry” (via a call to _check_manifest). If the OS supports manifests (or better Side-By-Side assemblies/DLLs) the CRTs´ DLL forces the check of the EXEs´ manifest. If there is no (valid) manifest, then the DLL refuses to load (returns 0) and therefor the EXE cannot be started. It might display the following error message (or similar):
R6034
An application has made an attempt to load the C runtime library incorrectly.
Please contact the application’s support team for more information.
But in the following cases the manifest checking inside the CRT-DLL is not done:
Pre-fusion OS (FindActCtxSectionStringW not found in kernel32.dll)
Loaded by instrumented-mscoree.dll (mscoree.dll and pgort80.dll is already loaded)
The path returned with GetModuleFileNameW of the DLL is longer than 8000 characters
The path to the DLL, returned by GetLongPathName is longer than 8000 characters
看来,还是用回VC6,省事一点