【发布时间】:2020-03-11 00:57:35
【问题描述】:
我想在命名空间或其他东西中包含 WinAPI。在没有链接问题的情况下这可能吗?如果无法使用命名空间,是否有一些替代的首选方法?
【问题讨论】:
-
WinAPI 有什么问题?链接时名称冲突?还是丑陋的宏妨碍了?
-
您可以使用您选择的名称声明 Windows API 函数(例如,通过使用前缀将它们移动到命名空间),并使用
#pragma comment(linker, "/alternatename:MySymbol=RealSymbol")指令,以允许链接器匹配您的符号与出口。 -
@hol:问题可能不是 Windows API,而是
#include <Windows.h>指令,它引入了大量的预处理器宏。如果您的库包含一个名为CreateWindow的符号,那么如果您包含Windows.h标头,您将不可避免地遇到问题。 -
@rem:我过去尝试过,发现它只解决了一半的问题。它允许库的实现者引入一个符号,否则该符号会与 Windows SDK 标头中定义的预处理器宏发生冲突。但是,如果该库的客户端也包含 Windows SDK 标头,则它对它们没有帮助。对于库的实现者和客户,我上面说明的方案更易于维护。对于实际用例,您可以查看从版本 17134 开始随 Windows SDK 一起提供的 C++/WinRT 标头 (
base.h)。 -
至于原来的问题,能否请您强调一下您要解决的具体问题?