询问者
c++程序问题

问题
-
用c++做一个为win32控制台程序,没有改代码,但没法编译。
错误列表没有错误。
1>------ 已启动生成: 项目: MYvcp_1, 配置: Debug Win32 ------
1>未将对象引用设置到对象的实例。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========除了c++,那种项目类型都不行,其他语言都可以正常编译。
打开vs时提示遇到了一个错误,说可能是有扩展导致的,错误记录到日志里。安装的扩展只有Installer
和WDK。其他的都是自动装的,没发现什么问题。日志:<entry> <record>2089</record> <time>2019/08/09 05:42:16.681</time> <type>Error</type> <source>Editor or Editor Extension</source> <description>Microsoft.VisualStudio.Composition.CompositionFailedException: 应用适当的约束后,预期的 1 输出合同名称"Microsoft.VisualStudio.CppSvc.Internal.CodeAnalysis.ICodeAnalysisService"但找到的 0。
 在 Microsoft.VisualStudio.Composition.ExportProvider.GetExports(ImportDefinition importDefinition)
 在 Microsoft.VisualStudio.Composition.ExportProvider.GetExports[T,TMetadataView](String contractName, ImportCardinality cardinality)
 在 Microsoft.VisualStudio.Composition.ExportProvider.GetExport[T,TMetadataView](String contractName)
 在 Microsoft.VisualStudio.Composition.ExportProvider.GetExport[T](String contractName)
 在 Microsoft.VisualStudio.Composition.ExportProvider.GetExport[T]()
 在 Microsoft.VisualStudio.Composition.ExportProvider.GetExportedValue[T]()
 在 Microsoft.VisualStudio.ComponentModelHost.ComponentModel.GetService[T]()
 在 Microsoft.VisualStudio.VC.ManagedInterop.<>c.<Initialize>b__52_15()
 在 System.Lazy`1.CreateValue()
 在 System.Lazy`1.LazyInitValue()
 在 System.Lazy`1.get_Value()
 在 Microsoft.VisualStudio.VC.CodeAnalysis.ResultTaggerProvider.CreateTagger[T](ITextBuffer buffer)
 在 Microsoft.VisualStudio.Text.Tagging.Implementation.TagAggregator`1.GatherTaggers(ITextBuffer textBuffer)
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
 在 Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)</description> </entry>
看网上说,HKLM\... 有一个enable改成0可以解决,但电脑上本来都是0。
谢谢
全部回复
-
您好,
以前是用vb.net开发,后来学c++,在vsinstaller修改安装的。
这个问题是一开始就有的,自安装到现在没有成功编译出一个c++项目来。
$(VC_LibraryPath_x86)值为E:\vs\vs\VC\Tools\MSVC\14.16.27023\lib\x86;
E:\vs\vs\VC\Tools\MSVC\14.16.27023\atlmfc\lib\x86;
E:\vs\vs\VC\Auxiliary\VS\lib\x86;
E:\Windows Kits\10\lib\10.0.17763\ucrt\x86需要更改吗?如果需要的话怎么改?我是根据属性页>VC++目录里面看到的。
谢谢
Best Regards,
chenlt- 已编辑 Chenlt 2019年8月12日 5:29
-
你好,
初步判定感觉是由于扩展引起的,尝试下使用安全模式打开VS来隔绝扩展,是否可行。详情可参考以下这个链接,虽然错误不一样,但都有可能是扩展导致的。
当然还有一种方式是通过VS installer修复你的环境,具体方法如下图。需要注意这会清除你的扩展和用户设置,还原你的环境,这需要谨慎使用。
Best Regards,
- 已建议为答案 Suarez-ZhouMicrosoft contingent staff 2019年8月15日 2:00
-
安装完成。
1>------ 已启动生成: 项目: MYvcp_1, 配置: Debug Win32 ------
1>pch.cpp
1>MYvcp_1.cpp
1>MYvcp_1.vcxproj -> D:\vs project\MYvcps\Debug\MYvcp_1.exe
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
“MYvcp_1.exe”(Win32): 已加载“D:\vs project\MYvcps\Debug\MYvcp_1.exe”。已加载符号。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\kernel32.dll”。无法查找或打开 PDB 文件。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\KernelBase.dll”。无法查找或打开 PDB 文件。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\apphelp.dll”。无法查找或打开 PDB 文件。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\msvcp140d.dll”。无法查找或打开 PDB 文件。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\vcruntime140d.dll”。无法查找或打开 PDB 文件。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\ucrtbased.dll”。无法查找或打开 PDB 文件。
线程 0x1dfc 已退出,返回值为 0 (0x0)。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\kernel.appcore.dll”。无法查找或打开 PDB 文件。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\msvcrt.dll”。无法查找或打开 PDB 文件。
“MYvcp_1.exe”(Win32): 已加载“C:\Windows\System32\rpcrt4.dll”。无法查找或打开 PDB 文件。
线程 0x2200 已退出,返回值为 0 (0x0)。
线程 0x27f0 已退出,返回值为 0 (0x0)。
程序“[1340] MYvcp_1.exe”已退出,返回值为 0 (0x0)。终于成功了,虽然报错依旧。每个扩展都启用了
那会不会是wdk版本问题?
vs2017 15.9.11,能发来一个链接吗?确认一下 谢谢
-
你好,
底下的“无法查找或打开 PDB 文件”报错可以忽略,如果你想解决,可以通过打开菜单调试/选项/调试/常规/启用源服务器支持,那么下次调试时会自动下载相关文件。具体步骤如下图所示。
WDK版本问题?你可以选择下载最新的WDK,适用于最新的Windows 10 1903版本。
链接:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk
Best Regards,
Suarez Zhou
-
你好,
我这边安装测试了一下,使用Win10 1903对应VS 2019,安装成功。
请你参照以下链接安装对应版本的WDK,内容附属的版本说明很详细也很完整,应该有适合你的WDK版本。
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/other-wdk-downloads
Best Regards,
- 已建议为答案 Suarez-ZhouMicrosoft contingent staff 2019年8月15日 2:01
-
你好,
请问你的问题解决了吗?如果解决了,请标记有帮助的答案为正确答案,这会帮助其他有相同问题的社区成员更快地找到解决方案。如果你还没有解决,欢迎你继续来提问。
Best Regards,
Suarez Zhou
- 已建议为答案 Suarez-ZhouMicrosoft contingent staff 2019年8月15日 2:00
- 取消建议作为答案 Suarez-ZhouMicrosoft contingent staff 2019年8月15日 2:01
-
你好,wdk已经安装完成,普通的c++项目正常,不过又有两个问题。
1.driver项目不在正常位置里。
2.新建这个项目后,除了1053个错误!主要是ntddk.h 打不开,还有的是少了分号;
这个代码是从https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf--driver复制的。
重新安装的wdk和以前版本不一样,但没有重装扩展。
输出:
1>------ 已启动生成: 项目: kmdHELLO, 配置: Release Win32 ------
1>E:\vs\vs\Common7\IDE\VC\VCTargets\Microsoft.Cpp.WindowsSDK.targets(46,5): error MSB8036: 找不到 Windows SDK 版本8.1。请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SDK 版本。
1>已完成生成项目“kmdHELLO.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
sdk版本就两个:10.0.17763.0;无升级。网上没有找到合适的解决方案,求助! 谢谢。
- 已编辑 Chenlt 2019年8月21日 6:26 补充
-
-
你好,
我注意到之前你的错误列表还有这句话。
>>1>E:\vs\vs\Common7\IDE\VC\VCTargets\Microsoft.Cpp.WindowsSDK.targets(46,5): error MSB8036: 找不到 Windows SDK 版本8.1。请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SDK 版本。
请在项目属性设置里改回Win10版本,如果没有错的话,你的项目是直接用的人家编译过的,而不是复制过来的,他使用的win8系统的SDK,所以他项目的属性设置默认的是Win8,但是你并没有这个版本,所以会产生错误,下回如果直接使用别人的项目应该要检查一下属性设置里这两项,别人使用的版本很有可能会与自己不同,所以在自己本地编译时需要更改。
>>第二个问题,全盘搜索,都没发现ntddk.h这个文件
C:\Program Files (x86)\Windows Kits到这个文件夹去搜索一下,这是默认的安装路径,或者你自定义过,也可以去自己安装的路径搜索一下。首先这个文件如果安装了是肯定存在的,如果你找不到,可能是你没安装,或者安装过程出了错,那就需要重新安装了。
Best Regards,
Suarez Zhou