如何处理覆盖某些函数名称的 WinAPI 宏?

How to deal with WinAPI macros overriding some function names?

<windows.h> 为 WinAPI 的 Ansi 和 Unicode 版本定义宏。 我的 class 库中有一个名为 SendMessage 的函数。在包含我的库之前包含 <windows.h> 之前它工作正常。在这种情况下 SendMessage 被宏覆盖,函数名称变为 SendMessageASendMessageW.

是否可以在不更改函数名称的情况下以某种方式处理它以保持与旧版本库的兼容性?

真正的问题是 WinAPI 的函数定义是在 C 预处理器级别,因此您必须编写一些丑陋的代码来尝试与它们共存。

如果可能的话,您应该重命名代码库的函数,以免与 WinAPI 发生冲突。


否则,您可以编写类似#undef SendMessage的代码,在定义您自己的函数之前取消定义WinAPI对该函数的定义。

如果您需要在定义自己的函数和使用 WinAPI 的函数宏之间切换,您还可以使用 #pragma push_macro#pragma pop_macro 功能在 undef 和之后恢复。