none
c++程序问题 RRS feed

  • 问题

  • 用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: &#x5E94;&#x7528;&#x9002;&#x5F53;&#x7684;&#x7EA6;&#x675F;&#x540E;&#xFF0C;&#x9884;&#x671F;&#x7684; 1 &#x8F93;&#x51FA;&#x5408;&#x540C;&#x540D;&#x79F0;&quot;Microsoft.VisualStudio.CppSvc.Internal.CodeAnalysis.ICodeAnalysisService&quot;&#x4F46;&#x627E;&#x5230;&#x7684; 0&#x3002;&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.Composition.ExportProvider.GetExports(ImportDefinition importDefinition)&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.Composition.ExportProvider.GetExports[T,TMetadataView](String contractName, ImportCardinality cardinality)&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.Composition.ExportProvider.GetExport[T,TMetadataView](String contractName)&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.Composition.ExportProvider.GetExport[T](String contractName)&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.Composition.ExportProvider.GetExport[T]()&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.Composition.ExportProvider.GetExportedValue[T]()&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.ComponentModelHost.ComponentModel.GetService[T]()&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.VC.ManagedInterop.&lt;&gt;c.&lt;Initialize&gt;b__52_15()&#x000D;&#x000A;   &#x5728; System.Lazy`1.CreateValue()&#x000D;&#x000A;   &#x5728; System.Lazy`1.LazyInitValue()&#x000D;&#x000A;   &#x5728; System.Lazy`1.get_Value()&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.VC.CodeAnalysis.ResultTaggerProvider.CreateTagger[T](ITextBuffer buffer)&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.Text.Tagging.Implementation.TagAggregator`1.GatherTaggers(ITextBuffer textBuffer)&#x000D;&#x000A;--- &#x5F15;&#x53D1;&#x5F02;&#x5E38;&#x7684;&#x4E0A;&#x4E00;&#x4F4D;&#x7F6E;&#x4E2D;&#x5806;&#x6808;&#x8DDF;&#x8E2A;&#x7684;&#x672B;&#x5C3E; ---&#x000D;&#x000A;   &#x5728; Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)</description>
      </entry>

    看网上说,HKLM\... 有一个enable改成0可以解决,但电脑上本来都是0。

    谢谢

    2019年8月9日 6:34

全部回复

  • 你好,

    感谢你在MSDN论坛发帖。

    请问是什么时候开始创建Win32会产生这种错误呢?有没有尝试过重新安装vs或者C++相关的库呢?亦或者属性设置里设置错误了呢?

    安装WDK后新的$(VC_LibraryPath_x86)的值被修改,有注意到WDK会修改库的默认值,尝试将默认值恢复试试呢。

    Best Regards,

    Surea 

    2019年8月9日 9:44
  • 你好,

    请问你的问题解决了吗?如果解决了,请标记正确的回复为答案,我们也欢迎你将自己的解决方案分享出来,并标记为答案,这会帮助其他有相同问题的人更快地找到解决方案。如果没有,欢迎随时提问。谢谢。

    Best Regards,

    Suarez Zhou

    2019年8月12日 2:50
  • 您好,
    以前是用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
    2019年8月12日 4:42
  • 你好,

    初步判定感觉是由于扩展引起的,尝试下使用安全模式打开VS来隔绝扩展,是否可行。详情可参考以下这个链接,虽然错误不一样,但都有可能是扩展导致的。

    https://social.msdn.microsoft.com/Forums/netframework/zh-CN/c9d36578-c1d6-44fa-90a9-245c6507e9fd/vs201731361289822608027861358433579736816348922133320803279793579?forum=vstudiozhchs

    当然还有一种方式是通过VS installer修复你的环境,具体方法如下图。需要注意这会清除你的扩展和用户设置,还原你的环境,这需要谨慎使用。

    Best Regards,

    Suarez Zhou

    2019年8月12日 6:14
  • 安全模式不行,卸掉wdk也不行,反而启动时增加了一个错误,driver testing,未将对象引用设置到对象的实例。

    正在修复...

    2019年8月13日 5:47
  • 安装完成。

    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,能发来一个链接吗?确认一下 谢谢

    2019年8月13日 7:49
  • 你好,

    底下的“无法查找或打开 PDB 文件”报错可以忽略,如果你想解决,可以通过打开菜单调试/选项/调试/常规/启用源服务器支持,那么下次调试时会自动下载相关文件。具体步骤如下图所示。

    WDK版本问题?你可以选择下载最新的WDK,适用于最新的Windows 10 1903版本。

    链接:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk

    Best Regards,

    Suarez Zhou

    2019年8月13日 8:07
  • 你好我的vs是2017的,Windows也不是最新的,这会引发兼容问题吗
    2019年8月13日 13:04
  • 你好,

    我这边安装测试了一下,使用Win10 1903对应VS 2019,安装成功。

    请你参照以下链接安装对应版本的WDK,内容附属的版本说明很详细也很完整,应该有适合你的WDK版本。

    https://docs.microsoft.com/zh-cn/windows-hardware/drivers/other-wdk-downloads

    Best Regards,

    Suarez Zhou

    2019年8月14日 6:12
  • 你好,

    请问你的问题解决了吗?如果解决了,请标记有帮助的答案为正确答案,这会帮助其他有相同问题的社区成员更快地找到解决方案。如果你还没有解决,欢迎你继续来提问。

    Best Regards,

    Suarez Zhou

    2019年8月15日 2:00
  • 你好,wdk已经安装完成,普通的c++项目正常,不过又有两个问题。

    1.driver项目不在正常位置里。

    1

    2.新建这个项目后,除了1053个错误!主要是ntddk.h 打不开,还有的是少了分号;

    2

    这个代码是从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 补充
    2019年8月21日 6:12
  • 你好,

    >>1.driver项目不在正常位置里。

    这个似乎不影响程序吧。

    >>2.新建这个项目后,除了1053个错误!主要是ntddk.h 打不开,还有的是少了分号;

    查看你的程序很多都有报错,红色的波浪号就是。你的头文件就发生了错误,头文件没有正确包含,所以底下相关的函数程序就找不到它们的定义,因此就发生了很多很多的错误。官方的代码基本不会有错误。我觉得这错误主要还是头文件引起的,检查WDK的文件夹是否有ntddk.h这个文件。再检查你的头文件和库配置是否正确,是否正确包含了WDK的文件夹。

    Best Regards,

    Suarez Zhou

    2019年8月22日 7:18
  • 第一个问题没有影响第二个问题,全盘搜索,都没发现ntddk.h这个文件
    2019年8月24日 7:16
  • 你好,

    我注意到之前你的错误列表还有这句话。

    >>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

    2019年8月26日 2:48