MFC有如下定义

#ifdef UNICODE
#define DrawText  DrawTextW
#else
#define DrawText  DrawTextA
#endif // !UNICODE

但是我正在使用一个也具有DrawText()函数的库,我想MFC也定义了更改,并且此调用出现链接器错误,因为显然该库没有名称为DrawTextW(...)的函数。

如何使库函数在MFC应用程序中起作用?

最佳答案

这不是MFC,而是Windows API。解决隐藏其他符号的宏的规定方法是暂时禁用宏:

// Temporarily undefine the DrawText macro
#pragma push_macro("DrawText")
#undef DrawText

// Call your version of DrawText
DrawText( ... );

// Re-enable the macro
#pragma pop_macro("DrawText")

#pragma push_macropop_macro是不破坏Windows SDK header 所必需的。

对于您的类,应在头文件和实现文件中应用相同的方案。如果您不能更改此类的头文件,则需要将#include指令包装在push/undef/pop序列中:
#pragma push_macro("DrawText")
#undef DrawText

#include "my_header.h"

#pragma pop_macro("DrawText")

09-06 12:59