R6034错误解决办法

转载自:http://hi.baidu.com/%B3%E6%B5%C4%B4%AB%C8%CB/blog/item/1ee503e785263324b838206f.html

提示没有找到MSVCR80D.dll

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.

这是由于manifest文件没有被正确嵌入EXE中所导致的。工程建立后默认是设定要嵌入manifest文件的,如果该文件没有被正确嵌入,那么就会报这个错误。当然如果设置生成清单(在工程属性、配置属性、连接器下的清单文件选项里),不嵌入清单(就在下面的清单工具的输入和输出选项里),那么当把manifest删掉后再运行程序,也会报这个错误。网上还看到说FAT32文件系统嵌入清单的时候需要开启下面的选项,不然也会异常。不过我用着FAT32没这个问题。倒是最近内存低的时候系统会有点异常,所以碰到了这个问题。

还看到一个德国的牛人解释:

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

解决方案

一、

1. 微软对于这个问题应该也有处理,不过感觉不是很人性化。在“属性->配置属性->清单工具->常规“下有一个”使用FAT32解决办法,把它选成是,就可以了。(注意:一定要先配置这个选项,然后再编译工程,要不然还是不好用:) 当然了
2. 找到你的工程的文件夹,),找到其下的myproject\myproject\Debug\ myproject.rec,把它删掉(删掉整个Debug目录也可以),重新编译,搞定!

二、

看到有人写了个程序向导:
1) 首先找到你的vs.net安装目录(如我的是E:\Program Files\Microsoft Visual Studio 8),定位到Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application文件夹,备份这个Application文件夹,不然一会你自己改 咂了我可不管啊:)。 
2) 打开html\2052,看到两个文件了吧,就那个AppSettings.htm了,这个管着你的那个配置向导的界面,用UE(不要告诉我你不知道ue啥东西,baidu it)打开,在266行“ </SPAN>”后回车,然后插入一下内容: 
<!-- this (hua)section is added by HUA. --> 
<br><br><br><br><br>

<span class="itemTextTop" id="FILE_SYSTEM_SPAN" title="">选择你所使用的文件系统:

<P CLASS="Spacer"> </P>

<INPUT TYPE="radio" CLASS="Radio" checked onPropertyChange="" NAME="filesystem" ID="FAT32" ACCESSKEY="F" TITLE="FAT32"> 
<DIV CLASS="itemTextRadioB" ID="FAT32_DIV" TITLE="FAT32"> 
<LABEL FOR="FAT32" ID="FAT32_LABEL">FAT32(<U>F</U>)</LABEL> 
</DIV>

<BR>

<INPUT TYPE="radio" CLASS="Radio" onPropertyChange="" NAME="filesystem" ID="NTFS" ACCESSKEY="N" TITLE="NTFS"> 
<DIV CLASS="itemTextRadioB" ID="NTFS_DIV" TITLE="NTFS"> 
<LABEL FOR="NTFS" ID="NTFS_LABEL">NTFS(<U>N</U>)</LABEL> 
</DIV> 
</span> 
<!-- end of (hua)section --> 
好,保存关闭,这个改完了,准备下一个。

3) 打开scripts\2052,这里就一个文件,ue打开它,找到138行“ var bATL = wizard.FindSymbol("SUPPORT_ATL");”其后回车,插入如下内容: 
// this (hua)section is added by HUA. 
var MFTool = config.Tools("VCManifestTool"); 
MFTool.UseFAT32Workaround = true; 
// end of (hua)section 
好,继续找到210行(源文件的210,你加了上边的语句就不是210了:)“ config = proj.Object.Configurations.Item("Release");”注意这次要在这行“前边”加如下内容: 
// this (hua)section is added by HUA. 
if(bFAT32) 

var MFTool = config.Tools("VCManifestTool"); 
MFTool.UseFAT32Workaround = true; 

// end of (hua)section

因为没有msvcr80.dll
可以改一下编译选项 多线程dll(/MD)改成多线程(MT)这样就静态链接,
也可以从你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装。”

感觉以下两种解决办法是比较方便的:
方法一:
在C:\Program Files\Microsoft Visual Studio 8\VC\redi
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:

msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest

把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以运行那个程序了。

方法二:
修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。

在vc6下调用vs2005的动态链接库,开始弹出“没有找到MSVCR80D.dll“的对话框,
安上述的第二种方法改行不通,安第一种方法会弹出如下文字的警示窗口
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.

Microsoft的解决方案:http://msdn.microsoft.com/zh-cn/library/ms235560(VS.80).aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R6002是一个常见的运行时错误,它指示了在程序运行时遇到的问题。这个错误通常是由于内存问题引起的,可能是由于内存不足,或者是程序中存在内存泄漏导致的。下面是一些可能的解决方法: 1. 升级操作系统:有时候,旧版本的操作系统可能存在一些与内存管理相关的问题。尝试升级操作系统到最新版本,以获得更好的内存管理性能。 2. 检查程序内存使用量:程序可能使用了过多的内存资源,导致内存不足。检查程序代码,确认是否有内存泄漏的情况出现,修复这些问题,以解决R6002错误。 3. 关闭其他应用程序:关闭其他不必要的应用程序,以释放一些内存资源。在运行过程中,确保没有其他大量占用内存的程序在后台运行。 4. 增加系统内存:如果你的计算机内存不足,考虑增加内存容量。这样可以为程序提供更多的空间来运行,减少R6002错误的发生。 5. 清理磁盘空间:清理计算机上的临时文件和垃圾文件,以释放磁盘空间。这将提供更多的虚拟内存空间,可以减少R6002错误。 6. 重新安装程序:尝试重新安装出现R6002错误的程序。有时候,这个错误可能是由于程序文件损坏或丢失引起的。 总之,R6002错误通常与内存问题有关。通过升级操作系统、检查程序内存使用量、关闭其他应用程序、增加系统内存、清理磁盘空间或重新安装程序,可以解决这个错误

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值