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

标签 c++ c windows winapi macros

<windows.h>为 WinAPI 的 Ansi 和 Unicode 版本定义宏。
我有一个名为 SendMessage 的函数在我的类(class)图书馆。它工作正常,直到 <windows.h>在包括我的图书馆之前包括在内。在这种情况下 SendMessage被宏覆盖,函数名变为 SendMessageASendMessageW .
是否可以在不更改函数名称的情况下以某种方式处理它以保存与旧版本库的兼容性?

最佳答案

真正的问题是 WinAPI 的函数定义处于 C 预处理器级别,因此您必须编写一些丑陋的代码来尝试与它们共存。
如果可能,您应该重命名代码库的函数,以免与 WinAPI 发生冲突。

否则,您可以编写类似 #undef SendMessage 的代码。在定义您自己的函数之前取消定义 WinAPI 对该函数的定义。
如果需要在定义自己的函数和使用 WinAPI 的函数宏之间切换,也可以使用 #pragma push_macro#pragma pop_macroundef 之前保留宏的功能并在之后恢复它。

关于c++ - 如何处理覆盖某些函数名称的 WinAPI 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69041202/

相关文章:

c - 将数组分配给函数宏

c++ - 创建虚拟设备

python - 如何在Python3中使用C代码

windows - Windows上的递归移动命令

java - 如何使用 Java Process 读取 mysql 控制台输出

c++ - 字符串操作 C++ 在字符串后存储整数

javascript - 如何在 QWebEngineView 中将值从 QML 传递给 JavaScript

c++ - 为什么 std::cout 输出溢出?

c++ - Qt::Popup 破坏 QScroller 动态滚动?

c - 在 C 中复制文件后保留文件所有者和权限