关于

本文演示环境: 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还提示找不到符号报错的更多相关文章

  1. 【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_ ...

  2. 记一次解决cmd中执行java提示"找不到或无法加载主类"的问题

    今天遇到一个问题:在cmd命令行中,用javac编译java文件可以成功,但是用java执行却提示“找不到或无法加载主类”.现将该问题的原因以及解决办法记录一下. 先理解一下系统变量path和clas ...

  3. 解决Android Studio Conflict with dependency 'com.android.support:support-annotations'报错

    解决Android Studio Conflict with dependency 'com.android.support:support-annotations'报错 在Android Studi ...

  4. 泰德激光打标软件 包含 #include "Main.h" 时 原本正确的单元却报错

    问题:泰德激光打标软件  ,当新增单元需要包含 #include "Main.h" 时, 原本正确的单元却报错. 办法:包含 #include "Main.h" ...

  5. 解决javah生成.h头文件找不到找不到android.support.v7.app.AppCompatActivity的问题

    问题描写叙述: 在使用Android Studio进行JNI开发时,须要使用javah生成C或C++的头文件,可是可能会遇到: 错误: 无法訪问android.support.v7.app.AppCo ...

  6. 解决Vue项目打包之后放到nginx下刷新就报错404的问题

    最近跟着某机构的教学视频敲了一遍vue项目,但是在windows环境下部署的时候就懵逼了放到nginx下正常跑没问题,但是刷新之后就报404错误 前端项目构建vue 脚手架版本 是@vue/cli 4 ...

  7. Visual Studio 下C#编译器在解析属性名时如果增加一个get_[您的另一个已经包含在类中属性名]的属性会报错,微软大哥这是什么鬼?

    假设在在我们的vs环境新建一个类 copy以下代码,表面看好像一切都没有问题. using System; using System.Collections.Generic; using System ...

  8. 【技术贴】解决支付宝充值信用卡还款跳转到网上银行报错Error 404 - Not Found

    声明 : 本文在 GFDL 1.2 下发布,本文出处光大银行信用卡  http://bbs.090989.com/forum-186-1.html http://androidgao.blogspot ...

  9. 解决从源码编译ncurses6.0编译lib_gen.c报错的问题

    直接从官网的源码编译时,会提示报错: gcc -DHAVE_CONFIG_H -I. -I../include -D_GNU_SOURCE -DNDEBUG -O2 --param max-inlin ...

随机推荐

  1. dotnet 将自动代码格式化机器人带入团队 GitLab 平台

    给团队带入一个 代码格式化机器人 能提升团队的幸福度,让团队的成员安心写代码,不用关注代码格式化问题,将格式代码这个粗活交给机器人去做.同时也能减少在代码审查里撕格式化问题的时间,让更多的时间投入到更 ...

  2. REPuter注释叶绿体重复序列

    REPuter可注释叶绿体重复序列,包括4种类型,Forward(F), Reverse (R), Complement (C), Palindromic (P). REPuter 是可在线注释, 详 ...

  3. Mysql优化,ICP、BNL算法、BKA算法、MMR算法

    ICP(Index Condition Pushdown,索引条件下推)是MySQL5.6版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式. 出现原因:ICP出现Mysql5.6以前, ...

  4. Windows下的Python多版本管理?

    虽然接触了好几年python,但一些细节没有注意.最近看网课,看到这个Windows系统下Python多版本管理的问题,记录下备忘. 假设现在windows环境中有python2,python3和an ...

  5. socket编程:多路复用I/O服务端客户端之select

    其实在之前的TCP之中,我们编程实现了多进程,多线程机制下的TCP服务器,但是对于这种的TCP服务器而言,存在太大的资源局限性.所以我们可以是用I/0模型中的多路复用I/O模型来进行编程. 他的具体思 ...

  6. 28-Merge Two Sorted Lists

    easy 21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new l ...

  7. 【题解】洛谷P1001 A+B Problem

    第一篇博客,献给2020年的残夏. 静听8月的热情与安宁,在竞赛中的时光如白驹过隙. 也不惧未知的风雨,努力向着既往的通途. 题目地址 https://www.luogu.com.cn/problem ...

  8. Scala和Java的List集合互相转换

    import java.util import scala.collection.mutable /** * 集合互相转换 */ object ScalaToJava { def main(args: ...

  9. SpringBoot之HandlerInterceptorAdapter

    SpringBoot之HandlerInterceptorAdapter   在SpringBoot中我们可以使用HandlerInterceptorAdapter这个适配器来实现自己的拦截器.这样就 ...

  10. fastjson转换数字时,格式化小数点

    使用fastjson类库转换java对象时,对于BigDecimal类型,有时需要特殊格式,比如: 1.0,转为json时候,要求显式为1,因此需要在转换时做处理.步骤如下: 1.新建类,实现Valu ...