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_macro和pop_macro是不破坏Windows SDK header 所必需的。
对于您的类,应在头文件和实现文件中应用相同的方案。如果您不能更改此类的头文件,则需要将
#include
指令包装在push/undef/pop序列中:#pragma push_macro("DrawText")
#undef DrawText
#include "my_header.h"
#pragma pop_macro("DrawText")