如何禁用更改Unicode或ASCII的函数名称的MFC宏

zar*_*zar 3 c++ unicode mfc static-libraries visual-c++

MFC已经定义了这样的

#ifdef UNICODE
#define DrawText  DrawTextW
#else
#define DrawText  DrawTextA
#endif // !UNICODE
Run Code Online (Sandbox Code Playgroud)

但是我正在使用一个也有DrawText()函数的库,我猜MFC也定义了这个调用的变化,我收到了这个调用的链接器错误,因为很明显这个库没有名称为DrawTextW(...)的函数

如何使库函数在我的MFC应用程序中工作?

IIn*_*ble 5

这不是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")
Run Code Online (Sandbox Code Playgroud)

#pragma push_macropop_macro是不必破坏Windows SDK标头所必需的.

应该在类的头文件和实现文件中应用相同的方案.如果您无法更改此类的头文件,则需要将该#include指令包装在push/undef/pop序列中:

#pragma push_macro("DrawText")
#undef DrawText

#include "my_header.h"

#pragma pop_macro("DrawText")
Run Code Online (Sandbox Code Playgroud)