与 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 函数冲突的主要内容,如果未能解决你的问题,请参考以下文章

绕行 DrawText

android中使用canvas.drawText函数可否设置旋转

为啥使用 DT_MODIFYSTRING 选项将副本传递给 DrawText 函数时,原始 CString 会被覆盖?

UpdateLayeredWindow 和 DrawText

安卓画布drawText

如何解释 CDC::DrawText 返回负值?