请将窗口-安装程序标签留在-这个Q/A不是为C++专家,而是为像我这样的人,他们必须使用C++。他们可能面临这种潜在的时间浪费,并需要一个快速修复,以获得
msi.h
或其他包括快速运行。VS2017模板一定发生了很大的变化--我以前没有看到过这个问题。
VisualStudio2017 Community ,安装了所有可用的C++组件(可能专业版中不存在此问题?)
File => New => Project... => Visual C++\Windows Desktop\Windows Console Application => OK
。Right click solution => Build
。如前所述,不应出现错误。#include stdafx.h
下面的main()
函数之上:#include <msi.h>
// And just to make things link:
#pragma comment(lib, "msi.lib")
wincrypt.h
的案例中--这让我想到了WIN32_LEAN_AND_MEAN
--见下面的答案。我以为这些基本要素已经包括在内了。我一直在所有新C++ Windows Console Application projects
中看到这个问题,但是当我尝试使用Visual Studio 2013
创建的一个旧项目时,它将正确地编译msi.h
以及链接杂注。
从错误消息判断,预编译头(PCH)一定有问题。这就是让我失望的原因。
发布于 2018-01-06 17:10:33
UPDATE:其他人询问其他包含文件(与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>
也会起作用,所以这可能会使我的问题变得更加模糊。我可以发誓,我试过了--也许是在我做了一些项目设置的更改,使它仍然失败之后(这正是我希望帮助其他人避免的)。
如果只有这些基本的包含可以出现在文件中,但是注释掉了,那么它们就可以按照顺序快速地启用,以便进行测试--不费吹灰之力。
https://stackoverflow.com/questions/48129786
复制相似问题