与DrawText函数冲突

3

我正在开发一个多平台应用程序,在一个组件中有一个名叫DrawText的类方法。不幸的是,我在Windows上得到了一个链接器错误,说这个类的DrawTextW方法存在未解决的外部符号。

我以前见过其他以“Text”结尾的方法出现过这种情况,其中它会寻找FooTextW或FooTextA方法,而不是我定义的FooText方法。我的假设是,在Windows头文件中有一个宏定义,根据某些其他定义将FooText分配给FooTextW或FooTextA。

除了重命名我的函数(这是我过去做过的),还有什么好的方法可以解决这个问题吗?

谢谢。


请投赞成票:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6656174-have-a-version-of-windows-h-that-doesn-t-define-ma - Scott Langham
2个回答

5

你只有两个选择:

#ifdef DrawText
#undef DrawText
#endif

或者重新命名你的函数。Win32使用没有命名空间或作用域的宏,所以你有点被卡住了。

我们只是重新命名我们的函数。

顺便说一下:通常基于#ifdef UNICODE(或_UNICODE或其他几个变体)。


0

是的,这是在使用Windows时真正的问题,而且没有办法关闭它,因为所有的标题都是这样的:

#ifdef UNICODE
#define GetDlgItemText GetDlgItemTextW
#else
#define GetDlgItemText GetDlgItemTextA
#endif

所以无论如何,您都将获得定义的符号。如果您可以在#include windows.h之前#define某些内容以关闭此行为,那将非常好,但遗憾的是没有这样的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接