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

zen*_*no2 5 c c++ windows macros winapi

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

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

Dan*_*ein 3

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

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


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

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