首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在msvc中的cmake项目中添加多个inlcudedevpkey.h

需要在msvc中的cmake项目中添加多个inlcudedevpkey.h
EN

Stack Overflow用户
提问于 2021-12-28 14:37:00
回答 1查看 112关注 0票数 0

包含我的BundleController类的头文件多次包含devpkey.h头文件。因此MSVC给出的错误如下;

代码语言:javascript
复制
**Severity  Code    Description Project File    Line    Suppression State
Error   C2374   'DEVPKEY_Device_Address': redefinition; multiple initialization (compiling source file BundleController.cpp) C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared\devpkey.h   66  
Error   C2374   'DEVPKEY_Device_Address': redefinition; multiple initialization (compiling source file main.cpp)    C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared\devpkey.h    66  
Error   C2374   'DEVPKEY_Device_AssignedToGuest': redefinition; multiple initialization (compiling source file BundleController.cpp)    C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared\devpkey.h    167 
Error   C2374   'DEVPKEY_Device_AssignedToGuest': redefinition; multiple initialization (compiling source file main.cpp)    C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared\devpkey.h    167 
Error   C2374   'DEVPKEY_Device_BaseContainerId': redefinition; multiple initialization (compiling source file Bundlecontroller.cpp)    C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared\devpkey.h    74  
Error   C2374   'DEVPKEY_Device_BaseContainerId': redefinition; multiple initialization (compiling source file main.cpp)    C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared\devpkey.h    74  
Error   C2374   'DEVPKEY_Device_BiosDeviceName': redefinition; multiple initialization (compiling source file BundleController.cpp)     C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared\devpkey.h    153 
Error   C2374   'DEVPKEY_Device_BiosDeviceName': redefinition; multiple initialization (compiling source file main.cpp) C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared\devpkey.h    153 
.
.
.**

我需要多次将devpkey.h头文件包含到我的项目中,如何添加该文件?

项目编译工具为cmake。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-29 08:26:04

在这种情况下,总是需要查看代码并尝试理解错误的来源。DEVPKEY_Device_Address (和其他有问题的符号)用DEFINE_DEVPROPKEY宏定义。基于- are INITGUID被定义- DEFINE_DEVPROPKEY扩展为声明或定义。如果未定义INITGUID,则在包含devpkey.h之前(通常这不是直接的,而是由#include <initguid.h>完成的,因为这里存在额外的重要宏),我们将只有DEVPKEY_Device_Address和其他符号的声明,没有实际的定义。因此,我们得到了错误未解决的符号的链接时间。如果在每一个包含devpkey.h之前包含initguid.h .h,我们将有多个符号定义。通常这不能导致错误,因为在符号定义中是DECLSPEC_SELECTANY,这可以扩展到__declspec( selectany )

告诉编译器声明的全局数据项(变量或对象)是pick--任何COMDAT (打包函数).At链接时间,如果看到一个COMDAT的多个定义,则链接器选择一个,然后丢弃其余的。

但是,如果您得到了错误的__declspec,请看上去不支持/理解C2374 (选择)。

在这种情况下-在任何文件中都需要有声明,其中只在任何一个文件中使用符号和定义。为此,请在选定的源文件中执行以下操作

代码语言:javascript
复制
#include <initguid.h>
// ...
#include <devpkey.h>

而在另一个文件中--仅限于

代码语言:javascript
复制
#include <devpkey.h>

以前没有#include <initguid.h>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70508536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档