<windows.h>
为 WinAPI 的 Ansi 和 Unicode 版本定义宏。
我有一个名为 SendMessage
的函数在我的类(class)图书馆。它工作正常,直到 <windows.h>
在包括我的图书馆之前包括在内。在这种情况下 SendMessage
被宏覆盖,函数名变为 SendMessageA
或 SendMessageW
.
是否可以在不更改函数名称的情况下以某种方式处理它以保存与旧版本库的兼容性?
最佳答案
真正的问题是 WinAPI 的函数定义处于 C 预处理器级别,因此您必须编写一些丑陋的代码来尝试与它们共存。
如果可能,您应该重命名代码库的函数,以免与 WinAPI 发生冲突。
否则,您可以编写类似 #undef SendMessage
的代码。在定义您自己的函数之前取消定义 WinAPI 对该函数的定义。
如果需要在定义自己的函数和使用 WinAPI 的函数宏之间切换,也可以使用 #pragma push_macro
和 #pragma pop_macro
在 undef
之前保留宏的功能并在之后恢复它。
关于c++ - 如何处理覆盖某些函数名称的 WinAPI 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69041202/