0

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

#define CWA(dll, api)                 ::api

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

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

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

提前致谢。

4

1 回答 1

4

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

#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".

于 2012-07-21T14:47:26.483 回答