Windows串口之解决包含setupapi.h还提示找不到符号报错
关于
本文演示环境: win10 1909 + VS2017
1. 错误信息
明明已经添加了头文件setupapi.h
和 库 setupapi.lib
, 却还是提示报错,报错信息:
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\setupapi.h(65): error C2143: 语法错误: 缺少“;”(在“*”的前面)
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\setupapi.h(65): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\spapidef.h(28): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\spapidef.h(28): error C2146: 语法错误: 缺少“;”(在标识符“SP_LOG_TOKEN”的前面)
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\prsht.h(104): error C2065: “CALLBACK”: 未声明的标识符
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\prsht.h(104): error C2065: “LPFNPSPCALLBACKA”: 未声明的标识符
.....
2. 错误示范
#include <setupapi.h> // Includes the SetupAPI.
只写上面的这行代码,就会提示错误,尽管包含了头文件。 加上头文件 windows.h
就不会出现这些错误了(注意, windows.h放在setupapi.h的前面,否则,还是会出现上面的错误):
#include <windows.h> // Includes basic windows functionality.
#include <setupapi.h> // Includes the SetupAPI.
But, 却出现下面的提示:
>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winnt.h(154): fatal error C1189: #error: "No Target Architecture"
双击错误提示,可以看到下面的源码:
...
//
// Note: RC_INVOKED is checked in PROBE_ALIGNMENT to maintain compatibility with previous
// versions of the SDK which did not block inclusion in an .RC file.
//
#if defined(_AMD64_) || defined(_X86_)
#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif defined(_IA64_) || defined(_ARM_) || defined(_ARM64_)
//
// TODO: WOWXX - Unblock ARM. Make all alignment checks DWORD for now.
//
#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif !defined(RC_INVOKED)
#error "No Target Architecture"
#endif
...
这里出现了错误中的 No Target Architecture。
可以看到,这里的宏定义走到了下面的#elif !defined(RC_INVOKED) ,换而言之,应该满足上面#if defined(_AMD64_) || defined(_X86_)
或者 #elif defined(_IA64_) || defined(_ARM_) || defined(_ARM64_)
就可以不出错
3. 解决
- 3.1 注意引入头文件的顺序,windows.h要在前面。
#include <windows.h>
#include <setupapi.h>
- 3.2 添加库引用
#pragma comment (lib, "setupapi.lib")
或者在VS中配置
- 3.3 VS项目属性-> 配置 -> C/C++ -> 预处理器 -> 预处理器定义, 增加 满足上面条件的宏,比如:
_X86_
Windows串口之解决包含setupapi.h还提示找不到符号报错的更多相关文章
- 【Selenium】【BugList9】windows环境,fp = open("./"+ time.strftime("%Y-%m-%d %H:%M:%S") + " result.html",'wb'),报错:OSError: [Errno 22] Invalid argument: './2018-09-05 10:29:32 result.html'
[代码] if __name__=="__main__": suite = unittest.TestSuite() suite.addTest(Baidu("test_ ...
- 记一次解决cmd中执行java提示"找不到或无法加载主类"的问题
今天遇到一个问题:在cmd命令行中,用javac编译java文件可以成功,但是用java执行却提示“找不到或无法加载主类”.现将该问题的原因以及解决办法记录一下. 先理解一下系统变量path和clas ...
- 解决Android Studio Conflict with dependency 'com.android.support:support-annotations'报错
解决Android Studio Conflict with dependency 'com.android.support:support-annotations'报错 在Android Studi ...
- 泰德激光打标软件 包含 #include "Main.h" 时 原本正确的单元却报错
问题:泰德激光打标软件 ,当新增单元需要包含 #include "Main.h" 时, 原本正确的单元却报错. 办法:包含 #include "Main.h" ...
- 解决javah生成.h头文件找不到找不到android.support.v7.app.AppCompatActivity的问题
问题描写叙述: 在使用Android Studio进行JNI开发时,须要使用javah生成C或C++的头文件,可是可能会遇到: 错误: 无法訪问android.support.v7.app.AppCo ...
- 解决Vue项目打包之后放到nginx下刷新就报错404的问题
最近跟着某机构的教学视频敲了一遍vue项目,但是在windows环境下部署的时候就懵逼了放到nginx下正常跑没问题,但是刷新之后就报404错误 前端项目构建vue 脚手架版本 是@vue/cli 4 ...
- Visual Studio 下C#编译器在解析属性名时如果增加一个get_[您的另一个已经包含在类中属性名]的属性会报错,微软大哥这是什么鬼?
假设在在我们的vs环境新建一个类 copy以下代码,表面看好像一切都没有问题. using System; using System.Collections.Generic; using System ...
- 【技术贴】解决支付宝充值信用卡还款跳转到网上银行报错Error 404 - Not Found
声明 : 本文在 GFDL 1.2 下发布,本文出处光大银行信用卡 http://bbs.090989.com/forum-186-1.html http://androidgao.blogspot ...
- 解决从源码编译ncurses6.0编译lib_gen.c报错的问题
直接从官网的源码编译时,会提示报错: gcc -DHAVE_CONFIG_H -I. -I../include -D_GNU_SOURCE -DNDEBUG -O2 --param max-inlin ...
随机推荐
- R语言与医学统计图形-【28】ggplot2扩展包ggrepel、ggsci、gganimate、ggpubr
ggplot2绘图系统--扩展包ggrepel.ggsci.gganimate.ggpubr等 部分扩展包可在CRAN直接下载,有些需借助devtools包从Github下载. 1. ggrepel包 ...
- 毕业设计之zabbix集合
lnmp环境请查看https://www.cnblogs.com/betterquan/p/12285956.html 但是!!!注意php的编译: https://www.zabbix.com/do ...
- LATEX公式语法
see how any formula was written in any question or answer, including this one, right-click on the ex ...
- 断言(assert)简介
java中的断言assert的使用 一.assertion的意义和用法 J2SE 1.4在语言上提供了一个新特性,就是assertion功能,他是该版本再Java语言方面最大的革新. 从理论上来说,通 ...
- Oracle LOB类型
一.Oracle中的varchar2类型1.我们在Oracle数据库存储的字符数据一般是用VARCHAR2.VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Dat ...
- 转 【Android】- Android与html5交互操作
转自:https://blog.csdn.net/baidu_35701759/article/details/70314812 1. Android提供了WebView控件可访问网页 通过webVi ...
- Multiple Inheritance in C++
Multiple Inheritance is a feature of C++ where a class can inherit from more than one classes. The c ...
- SpringMVC详细实例
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...
- spring注解-扩展原理
AnnotationConfigApplicationContext(IOC容器)的有参构造方法中,在refresh()里对这些组件进行初始化 BeanPostProcessor bean后置处理器, ...
- profile的使用详解
前言 在开发过程中,我们的项目会存在不同的运行环境,比如开发环境.测试环境.生产环境,而我们的项目在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置, ...