我最近在网上浏览随机资源时发现了一些有趣的宏:
#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);
我认为它曾经告诉编译器/链接器为 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。
Edit: possible reason behind it - somebody wants to clearly document calls to global functions to other DLLs. It nicely reads: "I am calling function MessageBoxW from user32.dll".