VS2010使用存在的问题

使用vs2010时无法显示资源编辑,并弹出提示对话框找不到rcdll.dll, 其解决方法如下:

在注册表中找到:HKEY_CURRENT_USER/Software/Microsoft/Microsoft SDKs/Windows
在windows项中如果存在以下两项就修改为下列示例,如果没有新建如下两项并设置相应值:
X86系统:
"CurrentVersion"="v7.0a"
"CurrentInstallFolder"="C://Program Files//Microsoft SDKs//Windows//v7.0A//"

X64系统:
"CurrentVersion"="v7.0a"
"CurrentInstallFolder"="C://Program Files (x86)//Microsoft SDKs//Windows//v7.0A//"



在 VS2010 中通过 Debug 模式调试代码时,出现如下输出信息:


“abc.exe”: 已加载“D:\demo_abc\prj_win32\Debug\libxxx.dll”,已加载符号。

SXS: RtlCreateActivationContext() failed 0xc000000d

LDR: LdrpWalkImportDescriptor() failed to probe D:\demo_abc\prj_win32\Debug\libxxx.dll for its manifest, ntstatus 0xc000000d

调试器:: 在进程加载过程中引发了未处理的无法继续的异常

     弹出的提示对话框为:

应用程序正常初始化(0xc000000d)失败。请单击“确定”,终止应用程序。

     解决办法:在生成 dll 的时候需要将禁止生成清单文件。属性页-》链接器 --》清单文件--》生成清单   设置为“否”即可解决

以下为 原理性参考:

最近我在进行Ogre+CEGUI方面的编程,在VS2005环境下,程序能顺利地在Release和Debug模式下编译并生成。但是在Debug模式下,程序死活运行不成功,弹出如下的提示框。但在Release下却是正常的。真TMD令人头痛!用VS调式你会发现 

LDR: LdrpWalkImportDescriptor() failed to probe ***.dll for its manifest, ntstatus 0xc0150002

关于“应用程序正常初始化(0xc0150002)失败”问题的解决方案 - AK-47 - 天才
图1:程序错误

查看系统日志有3个SideBySide错误,错误内容如下: "找不到附属汇编 Microsoft.VC80.DebugCRT,上一个错误是 参照的汇编没有安装在系统上。"
关于“应用程序正常初始化(0xc0150002)失败”问题的解决方案 - AK-47 - 天才
图2:系统日志
在去XP系统目录中的WinSxs中找了一下,发现果然没  x86_Microsoft.VC80.DebugCRT 之类的文件件。

关于“应用程序正常初始化(0xc0150002)失败”问题的解决方案 - AK-47 - 天才
图3:系统目录
现在问题原因就明朗很多了,我们所编译生成的应用程序由于缺少必需的Debug版本的VC运行库而发生错误。因此解决方案就有多种了。
  • 方法
安装VC运行库(Debug),在VS2005目录下,进入VC edist这个目录,里面就存放在release和debug模式下的VC运行库,将你所需的Dll库文件和manifest文件复制到你应用程序目录,点击你就会发现程序可以运行了!

PS:
在我这次编程中,链接到CEGUIBase_d.dll动态链接库,应用程序错误就是由于这个库。于是我去CEGUI SDK目录看了一下,找到生成这个库的manifest文件,打开文件你会发现如下图所示的那样,出现2个dependency的运行库,即2个版本的VC运行库,"Microsoft.VC90.DebugCRT" version="9.0.21022.8" 和 "Microsoft.VC80.DebugCRT" version="8.0.50727.4053"。
关于“应用程序正常初始化(0xc0150002)失败”问题的解决方案 - AK-47 - 天才
图4:manifest文件

为什么一个库还要同时依赖2个版本的VC运行时呢??令人不解啊!!!

检查CEGUI SDK的解决方案,要生成CEGUIBase_d.dll这个库,需要CEGUIBase的源文件,此外还需要一个Dependences,它包含了CEGUIBase所必需的库。由于这个库下载来时已经生成好了,所以我认为:CEGUIBase_d.dll依赖2个运行时,是因为其所依赖的库在另一个编译环境生成的。这很容易就可以发现,在同一个解决方案中的CEGUIOgreRenderer项目中,生成CEGUIOgreRenderer.dll文件同时也伴随着其manifest文件,打开可以发现,其只依赖于一个VC运行时,即当前编译环境的运行时。

因此解决这个问题的方法就可以这样:下载相对应的Dependences库文件,或者下载所依赖库文件的源代码,重新编译。最终目的就是使库依赖当前编译环境使用的VC运行库版本。重新编译一下,你会惊奇地发现,现在的manifest文件中显示,只依赖一个VC运行库。哈哈哈,这就成了!


注:这是俺原创的,不容易的!!!!

仅供大伙和自己参考!




注意使用Dependency Walker 这个工具,可以查看程序依赖那些库!!!!

补充:详细资料

1. http://blog.csdn.net/wengyb/archive/2009/07/09/4335092.aspx

2. http://blog.csdn.net/avagrant158/archive/2009/10/28/4737212.aspx


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值