Please leave the window-installer tag in - this Q/A is not for C++ experts, but for people like me, who use C++ when they have to. They may face this potential time-waster, and need a quick fix to get
msi.h
or other includes operational quickly. VS2017 templates must have changed quite a bit - I didn't see this issue before.
Visual Studio 2017 Community Edition 安装了所有可用的 C++ 组件(也许这个问题在专业版中不存在?)。
文件 => 新建 => 项目... => Visual C++\Windows 桌面\Windows 控制台应用程序 => 确定
。- 进行快速测试以验证没有错误。
右键单击解决方案 => 构建
。如前所述,不应显示任何错误。 - 现在,在控制台应用程序的 CPP 文件中
main()
函数的正上方#include stdafx.h
的正下方添加 msi.h 的包含:
#include <msi.h>
// And just to make things link:
#pragma comment(lib, "msi.lib")
一个红色的错误 V 形应该出现在第一行评论开始的左上角悬停时说:“IntelliSense 引擎无法正常运行的错误太多,其中一些在编辑器中可能不可见。PCH 警告:发生未知错误。未生成 IntelliSense PCH 文件。“
现在进行构建应该会发现许多错误。在我的案例中,
wincrypt.h
- 它让我想到了WIN32_LEAN_AND_MEAN
- 请参阅下面的答案。我以为这些基础知识已经包括在内了。
我一直在所有新的 C++ Windows 控制台应用程序项目
中看到这个问题,但是当我在使用 Visual Studio 2013
创建的旧项目中尝试时,它使用 正确编译>msi.h
包含在链接 pragma 中。
从报错信息来看,肯定是预编译头(PCH)有问题。这就是让我失望的原因。
最佳答案
更新:其他人询问了其他包含文件(与 MSI 无关)的相同错误消息。我想这是一个不时发生的一般性问题 - 可能是很少使用的类(或包括 Windows.h
- 也许)?
作为一个一般建议,这可能是一个隐藏的依赖性问题(缺少包含),或者包含的错误顺序文件(由于某些不是很明显的技术原因,您需要更改包含的顺序)或不正确或缺少定义(如下面一行的答案所示)。 我的看法:访问 github.com 并搜索类似的示例代码。
对于我们这些偶尔需要 C++ 的人来说,解决这些问题可能非常笨拙,否则对于 C++ 专家来说是“众所周知的”(他们在几秒钟内将其修复为第二天性)。 C++ 专业人士:请记住,对于我们这些被迫在需要时笨手笨脚地使用 C++ 的人来说,诸如此类的问题可能会扼杀一整天的生产力——而且周围没有 C++ 专业人士可以询问——糟糕的情况! :-) - 我特此声明“善待你的 C++ 大师 - 如果你有他们 - 一天!”)。
在stdafx.h
,尝试在 #pragma once
之后添加这个在其他包括之前:
#define WIN32_LEAN_AND_MEAN
// Windows Header Files:
#include <windows.h>
现在尝试重建您的解决方案,看看问题是否已经消失。
虽然简单,但奇怪的错误消息(在上面的问题中看到)会让人们偏离正轨,试图找出问题所在。此外,此行为在 VS2017 中似乎是新的 - 模板更改。
看起来包括<atlstr.h>
也会起作用,所以这可能会使我的问题更加模糊。可以发誓我尝试过这个 - 也许在我进行了项目设置更改后仍然失败(正是我希望帮助其他人避免的)。
如果只有这些基本包含可以出现在文件中但被注释掉,那么它们可以按顺序快速启用以进行测试 - 没有任何大惊小怪。
关于c++ - IntelliSense 引擎无法正常运行的错误太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48129786/