使用头文件winbase.h的错误

本文介绍了一个在使用C++获取CPU数量时遇到的编译错误问题,当包含winbase.h头文件时出现大量语法错误。解决方案是将#include<winbase.h>替换为#include<windows.h>。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天想学习下完成端口的使用,需要获取CPU的个数,使用C++返回通过GetSystemInfo等方式获取本机系统的CPU数,添加

#include <winbase.h>

头文件然后进行编译的时候出现了一大堆的错误,错误如下:

1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(46): error C2146: 语法错误: 缺少“;”(在标识符“nLength”的前面)
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(46): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(47): error C2146: 语法错误: 缺少“;”(在标识符“lpSecurityDescriptor”的前面)
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(47): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(48): error C2146: 语法错误: 缺少“;”(在标识符“bInheritHandle”的前面)
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(48): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(52): error C2146: 语法错误: 缺少“;”(在标识符“Internal”的前面)
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(52): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(53): error C2146: 语法错误: 缺少“;”(在标识符“InternalHigh”的前面)
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(53): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(56): error C2146: 语法错误: 缺少“;”(在标识符“Offset”的前面)
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(56): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(57): error C2146: 语法错误: 缺少“;”(在标识符“OffsetHigh”的前面)
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(57): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(59): error C2146: 语法错误: 缺少“;”(在标识符“Pointer”的前面)
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(59): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(62): error C2146: 语法错误: 缺少“;”(在标识符“hEvent”的前面)
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(62): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\windows kits\8.0\include\um\minwinbase.h(66): error C2146: 语法错误: 缺少“;”(在标识符“lpCompletionKey”的前面)

......(太多类似的就不一一列出来了).......


直接说解决方式吧:

#include <winbase.h>

替换成

#include<windows.h>

就行了

C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(9878): error C2065: “InterlockedIncrement64”: 未声明的标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(9910): error C2065: “InterlockedDecrement64”: 未声明的标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(9946): error C3861: “InterlockedExchange64”: 找不到标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(10000): error C3861: “InterlockedExchangeAdd64”: 找不到标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(10010): error C3861: “InterlockedExchangeAdd64”: 找不到标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(10057): error C3861: “InterlockedAnd64”: 找不到标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(10067): error C3861: “InterlockedOr64”: 找不到标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(10077): error C3861: “InterlockedXor64”: 找不到标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\winrt\wrl\implements.h(1570): error C3861: “InterlockedCompareExchangeNoFence”: 找不到标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\winrt\wrl\implements.h(1588): error C3861: “InterlockedCompareExchangeRelease”: 找不到标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\winrt\wrl\implements.h(1874): error C2065: “_ARM64_BARRIER_ISH”: 未声明的标识符 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\winrt\wrl\implements.h(1874): error C3861: “__dmb”: 找不到标识符 src\Candidate\EnumTfCandidates.cpp(78): error C2665: “InterlockedIncrement”: 没有重载函数可以转换所有参数类型 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(9874): note: 可能是“unsigned __int64 InterlockedIncrement(volatile unsigned __int64 *)” src\Candidate\EnumTfCandidates.cpp(78): note: “unsigned __int64 InterlockedIncrement(volatile unsigned __int64 *)”: 无法将参数 1 从“LONG *”转换为“volatile unsigned __int64 *” src\Candidate\EnumTfCandidates.cpp(78): note: 指向的类型不相关; 转换需要 reinterpret_cast、C 样式强制转换或带圆括号的函数样式强制转换 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(9862): note: 或 “unsigned long InterlockedIncrement(volatile unsigned long *)” src\Candidate\EnumTfCandidates.cpp(78): note: “unsigned long InterlockedIncrement(volatile unsigned long *)”: 无法将参数 1 从“LONG *”转换为“volatile unsigned long *” src\Candidate\EnumTfCandidates.cpp(78): note: 指向的类型不相关; 转换需要 reinterpret_cast、C 样式强制转换或带圆括号的函数样式强制转换 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(9853): note: 或 “unsigned int InterlockedIncrement(volatile unsigned int *)” src\Candidate\EnumTfCandidates.cpp(78): note: “unsigned int InterlockedIncrement(volatile unsigned int *)”: 无法将参数 1 从“LONG *”转换为“volatile unsigned int *” src\Candidate\EnumTfCandidates.cpp(78): note: 指向的类型不相关; 转换需要 reinterpret_cast、C 样式强制转换或带圆括号的函数样式强制转换 src\Candidate\EnumTfCandidates.cpp(78): note: 尝试匹配参数列表“(LONG *)”时 src\Candidate\EnumTfCandidates.cpp(83): error C2665: “InterlockedDecrement”: 没有重载函数可以转换所有参数类型 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(9906): note: 可能是“unsigned __int64 InterlockedDecrement(volatile unsigned __int64 *)” src\Candidate\EnumTfCandidates.cpp(83): note: “unsigned __int64 InterlockedDecrement(volatile unsigned __int64 *)”: 无法将参数 1 从“LONG *”转换为“volatile unsigned __int64 *” src\Candidate\EnumTfCandidates.cpp(83): note: 指向的类型不相关; 转换需要 reinterpret_cast、C 样式强制转换或带圆括号的函数样式强制转换 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(9894): note: 或 “unsigned long InterlockedDecrement(volatile unsigned long *)” src\Candidate\EnumTfCandidates.cpp(83): note: “unsigned long InterlockedDecrement(volatile unsigned long *)”: 无法将参数 1 从“LONG *”转换为“volatile unsigned long *” src\Candidate\EnumTfCandidates.cpp(83): note: 指向的类型不相关; 转换需要 reinterpret_cast、C 样式强制转换或带圆括号的函数样式强制转换 C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um\winbase.h(9885): note: 或 “unsigned int InterlockedDecrement(volatile unsigned int *)” src\Candidate\EnumTfCandidates.cpp(83): note: “unsigned int InterlockedDecrement(volatile unsigned int *)”: 无法将参数 1 从“LONG *”转换为“volatile unsigned int *” src\Candidate\EnumTfCandidates.cpp(83): note: 指向的类型不相关; 转换需要 reinterpret_cast、C 样式强制转换或带圆括号的函数样式强制转换 src\Candidate\EnumTfCandidates.cpp(83): note: 尝试匹配参数列表“(LONG *)”时 > in src\Candidate\EnumTfCandidates.cpp PS D:\Downloads\MetasequoiaImeTsf-master\MetasequoiaImeTsf - 副本>
最新发布
06-17
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值