Конфликт с функцией DrawText - PullRequest
2 голосов
/ 23 апреля 2009

Я занимаюсь разработкой мультиплатформенного приложения, и в одном компоненте у меня есть метод класса DrawText. К сожалению, я получаю ошибку компоновщика (только в окнах), говорящую о том, что для метода DrawTextW этого класса есть неразрешенный внешний символ.

Я видел это раньше с другими методами, оканчивающимися на «Текст», где он ищет либо метод FooTextW, либо FooTextA вместо метода FooText, который я определил. Я предполагаю, что где-то в заголовках Windows есть макроопределение, присваивающее FooText FooTextW или FooTextA на основе какого-то другого определения.

Помимо переименования моей функции (что я и делал в прошлом), есть ли у кого-нибудь хорошие идеи для решения этой проблемы?

Спасибо.

Джо

Ответы [ 2 ]

5 голосов
/ 23 апреля 2009

У вас действительно есть только два варианта:

#ifdef DrawText
#undef DrawText
#endif

Или переименуйте свою функцию. Win32 использует макросы, которые не имеют пространства имен или области видимости, так что вы немного застряли.

Мы просто переименовываем наши функции.

Кстати: он обычно основан на #ifdef UNICODE (или _UNICODE или нескольких других вариантах).

0 голосов
/ 23 апреля 2009

Да, это реальная проблема с использованием Windows, и ее невозможно отключить, поскольку все заголовки выглядят так:

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

Итак, вы определите символ в любом случае. Было бы очень хорошо, если бы вы могли #define что-то перед # include'ing windows.h, который отключает это поведение, но, увы, ничего не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...