与 DrawText 函数冲突
Posted
技术标签:
【中文标题】与 DrawText 函数冲突【英文标题】:Conflict with DrawText function 【发布时间】:2009-04-22 20:52:10 【问题描述】:我正在开发一个多平台应用程序,在一个组件中我有一个名为 DrawText 的类方法。不幸的是,我收到一个链接器错误(仅在 Windows 上),提示此类的 DrawTextW 方法存在未解析的外部符号。
我之前看到过其他以“Text”结尾的方法,它正在寻找 FooTextW 或 FooTextA 方法,而不是我定义的 FooText 方法。我的假设是,在 Windows 标头的某处,有一个宏定义根据其他定义将 FooText 分配给 FooTextW 或 FooTextA。
除了重命名我的函数(这是我过去所做的)之外,有没有人有解决这个问题的好主意?
谢谢。
乔
【问题讨论】:
请投票:visualstudio.uservoice.com/forums/121579-visual-studio/… 【参考方案1】:你真的只有两个选择:
#ifdef DrawText
#undef DrawText
#endif
或者重命名你的函数。 Win32 使用没有命名空间或范围的宏,所以你有点卡住了。
我们只是重新命名我们的函数。
顺便说一句:它通常基于 #ifdef UNICODE(或 _UNICODE 或其他一些变体)。
【讨论】:
【参考方案2】:是的,这在使用 Windows 时确实存在问题,而且由于标题看起来都像这样,因此无法将其关闭:
#ifdef UNICODE
#define GetDlgItemText GetDlgItemTextW
#else
#define GetDlgItemText GetDlgItemTextA
#endif
因此,无论哪种方式,您都将获得定义的符号。如果您可以在#include'ing windows.h 之前#define 一些东西来关闭此行为,那就太好了,但可惜不存在。
【讨论】:
以上是关于与 DrawText 函数冲突的主要内容,如果未能解决你的问题,请参考以下文章
android中使用canvas.drawText函数可否设置旋转
为啥使用 DT_MODIFYSTRING 选项将副本传递给 DrawText 函数时,原始 CString 会被覆盖?