我最近在浏览互联网上的随机资源时发现了一些有趣的宏:
#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/