【问题标题】:Conflict with DrawText function与 DrawText 函数冲突
【发布时间】:2009-04-22 20:52:10
【问题描述】:

我正在开发一个多平台应用程序,在一个组件中我有一个名为 DrawText 的类方法。不幸的是,我收到一个链接器错误(仅在 Windows 上),提示此类的 DrawTextW 方法存在未解析的外部符号。

我之前看到过其他以“Text”结尾的方法,它正在寻找 FooTextW 或 FooTextA 方法,而不是我定义的 FooText 方法。我的假设是,在 Windows 标头的某处,有一个宏定义根据其他定义将 FooText 分配给 FooTextW 或 FooTextA。

除了重命名我的函数(这是我过去所做的)之外,有没有人有解决这个问题的好主意?

谢谢。

【问题讨论】:

标签: c++ winapi


【解决方案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 一些东西来关闭此行为,那就太好了,但可惜不存在。

    【讨论】:

      猜你喜欢
      • 2012-07-10
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多