c++ - CWA(dll,api) - C++ 宏?

标签 c++ windows visual-studio-2010 api macros

我最近在浏览互联网上的随机资源时发现了一些有趣的宏:

#define CWA(dll, api)                 ::api

有人可以向我解释那个宏是什么以及它还需要什么才能让它工作吗? 这是使用它的示例:

CWA(user32, MessageBoxW)(NULL, L"Hello world!", NULL, MB_OK);

我认为它曾经告诉编译器/链接器为 API 或其他东西使用一些特定的导入类型....

提前致谢。

最佳答案

预处理器语言非常容易阅读。你有宏:

#define CWA(dll, api) ::api

它被代码使用:

CWA(user32, MessageBoxW)(NULL, L"Hello world!", NULL, MB_OK);

所以预处理的结果是:

::MessageBoxW(NULL, L"Hello world!", NULL, MB_OK);

注意“api”只是宏的第二个参数,所以基本上宏有两个参数:第一个被忽略,第二个是全局函数的名称(::是调用全局函数的前缀,例如::MyGlobalFunc)。

第一个参数“dll”被忽略,所以它只是作为注释,函数在哪个 dll 中。

编辑:其背后的可能原因 - 有人想清楚地记录对其他 DLL 的全局函数调用。它写得很好:“我正在从 user32.dll 调用函数 MessageBoxW”。

关于c++ - CWA(dll,api) - C++ 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593096/

相关文章:

c++ - 多连接客户端套接字应用程序C++

c++ - 创建自定义迭代器结构以使用 cstdio

c++ - 在 C++ 中双冒号前的符号是什么意思?

asp.net-mvc - 无法添加 MVC Controller VS2012 给出 "object reference not set to an instance of an object"

visual-studio-2010 - 应用程序崩溃说:访问冲突读取位置0xbaadf04d

c++ - 将 char 数组转换为对象指针 - 这是 UB 吗?

python - 安装旧版本的 Tensorflow GPU

c# - 使用 C# 如何检测是否安装了 Windows Installer 4.5

windows - 如何检查开放端口是 TCP 还是 HTTP?

C# 4.0 允许项目不关心引用版本