我正在开发一个多平台应用程序,在一个组件中我有一个名为DrawText的类方法。不幸的是,我得到一个链接器错误(仅在Windows上),说这个类的DrawTextW方法有一个未解析的外部符号。
之前我已经看过其他以“Text”结尾的方法,它正在寻找FooTextW或FooTextA方法而不是我定义的FooText方法。我的假设是在Windows头文件的某处有一个宏定义,根据其他一些定义将FooText分配给FooTextW或FooTextA。
除了重命名我的功能(这是我过去所做的)之外,有没有人有解决这个问题的好主意?
感谢。
乔
答案 0 :(得分:5)
你真的只有两个选择:
#ifdef DrawText
#undef DrawText
#endif
或重命名您的功能。 Win32使用没有命名空间或作用域的宏,所以你有点卡住了。
我们只是重新命名我们的功能。
BTW:它通常基于#ifdef UNICODE(或_UNICODE或其他一些变体)。
答案 1 :(得分:0)
是的,使用Windows时这是一个真正的问题,因为标题都是这样的,所以无法将其关闭:
#ifdef UNICODE
#define GetDlgItemText GetDlgItemTextW
#else
#define GetDlgItemText GetDlgItemTextA
#endif
所以你要以任何一种方式定义符号。如果你能在#include'ing windows.h之前#define一些东西,这会很好地解决这个问题,但是不存在。