今天用VC2005写了个Activex,测试部署到其他机器由于目标机器缺少msvcr80.dll和mfc80u.dll,可定是无法运行,然后就想手动注册安装msvcr80.dll和mfc80u.dll,结果两个都弹出一样的错误信息:
baidu 了一下,终于找到一个同样错误网友:http://bbs.pediy.com/showthread.php?threadid=27494
不过,也是从一个德国的牛人解释:
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