我似乎经常花费过多的时间尝试让 #define 宏完全符合我的意愿。我会在下面发布我目前的困境,并感激任何帮助。但更重要的问题是,是否有任何实用程序可以推荐,能够快速显示宏实际上正在做什么?如果我能看到出了什么问题,即使是缓慢的试错过程也会快得多。
目前,我正在从一个 DLL 中动态加载一长串函数。我设置的方式是,函数指针与导出函数具有相同的名称,而用于原型定义的 typedef(s) 具有相同的名称,但是有一个前置下划线。因此,我想使用 #define 简化对长长的函数指针列表的赋值。
例如,在以下代码语句中,“hexdump”是 typedef'd 函数点的名称,也是函数的名称,而“_hexdump”是 typedef 的名称。如果 GetProcAddress() 失败,则增加失败计数器。
if (!(hexdump = (_hexdump)GetProcAddress(h, "hexdump"))) --iFail;
那么假设我想用宏来替换上述每一行,就像这样...
GETADDR_FOR(hexdump )
这是我到目前为止想出的最好方案。它并不能正常工作(我的 // 注释只是为了防止消息中的文本格式化)...
// #define GETADDR_FOR(a) if (!(a = (#_#a)GetProcAddress(h, "/""#a"/""))) --iFail;
再次强调,虽然我很希望知道我犯了什么愚蠢的错误,但如果有一个工具能够通过简单地插入我的宏来显示我的错误,那将使我的一天。