gpt4 book ai didi

c++ - gdipluspath 为 cstddef 和 rpcndr.h 抛出不明确的字节

转载 作者:行者123 更新时间:2023-12-02 07:04:41 27 4
gpt4 key购买 nike

我目前正在更新一个古老的程序,该程序最后是用 Visual Studio 2008 编译的。我正在将它(.lib 项目)更新到 Visual Studio 2017 以获取最新的 Windows sdk (10.0.15063.0),但是,gdiplus 库会抛出一个错误不明确的符号错误。更具体地说:

3>c:\program files (x86)\windows kits\10\include\10.0.15063.0\um\GdiplusPath.h(145): error C2872: 'byte': ambiguous symbol
3>c:\program files (x86)\windows kits\10\include\10.0.15063.0\shared\rpcndr.h(191): note: could be 'unsigned char byte'
3>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\cstddef(15): note: or 'std::byte'

不幸的是,我在这个问题上发现的标准尝试假设歧义错误是由我直接造成的,而不是由 Visual Studio 的新包含引起的(这就是我对 cstddef 的理解?)。

那么我如何才能将外部库指向使用一种符号定义或另一种呢?

非常感谢任何帮助。

最佳答案

出现此问题的原因是最近引入的标准::std::byte::byte会与 byte 发生冲突的类型rpcndr.h 中定义的类型:

// cstddef
enum class byte : unsigned char {};

// rpcndr.h
typedef unsigned char byte;

但这并不是 Windows header 的唯一问题,它们还引入了 minmax<limits> 冲突的宏(gdiplus 需要)内容。

因此,解决方法是仔细控制如何包含 Windows 和 gdi plus header ,如下所示:

//  global compilation flag configuring windows sdk headers
// preventing inclusion of min and max macros clashing with <limits>
#define NOMINMAX 1

// override byte to prevent clashes with <cstddef>
#define byte win_byte_override

#include <Windows.h> // gdi plus requires Windows.h
// ...includes for other windows header that may use byte...

// Define min max macros required by GDI+ headers.
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#else
#error max macro is already defined
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#else
#error min macro is already defined
#endif

#include <gdiplus.h>

// Undefine min max macros so they won't collide with <limits> header content.
#undef min
#undef max

// Undefine byte macros so it won't collide with <cstddef> header content.
#undef byte

请注意,此方法意味着用户代码从不使用 byte , minmax来自 Windows sdk header 。

还有byte可能会与其他第三方库发生冲突。

关于c++ - gdipluspath 为 cstddef 和 rpcndr.h 抛出不明确的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45957830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com