Visual C ++ автоматически добавляет A или W к концу функции - PullRequest
4 голосов
/ 29 января 2010

В C ++ я определил класс, который имеет это как член:

static const std::basic_string<TCHAR> MyClass_;

Для этого значения также есть функция получения:

LPCTSTR CClass::GetMyClassName()
{
    return MyClass_.c_str();
}

Когда я создаю экземпляр этого класса и затем пытаюсь получить к нему доступ, всплывает intellisense, но имя изменяется в зависимости от того, был ли проект скомпилирован для Unicode или Multibyte. Если он был скомпилирован для Unicode, функция выглядит так:

aClass.GetMyClassNameW();

иначе это:

aClass.GetMyClassNameA();

То, что я хотел бы знать, как меняется имя? Также я хотел бы знать, возможно ли для intellisense показывать правильное имя функции? Чтобы я мог получить к нему доступ вот так:

aClass.GetMyClassName()

РЕДАКТИРОВАТЬ: точное имя функции-члена, которое я использовал в моем коде:

WinClass::GetClassName()

Ответы [ 2 ]

12 голосов
/ 29 января 2010

Ваше имя метода в буквальном смысле " GetMyClassName " или " GetClassName "?

GetClassName находится в SDK (winuser.h) и переопределяется на основе определений UNICODE. Если вы используете «GetClassName», intellisense, вероятно, запутается; на самом деле компилятор генерирует A / W-суффикс и для фактического скомпилированного метода, но это будет работать, потому что все (компоновщик / компилятор) соглашаются с переопределенным именем (даже если его не видно).

1 голос
/ 29 января 2010

Это способ, которым Windows фактически поддерживает 2 версии Win32 API:

  • Один для символов ascii из 1 байта с (char)
  • Один для Unicode с символами обычно шириной 2 байта (wchar)

Если вы посмотрите на то есть winuser.h, вы увидите следующее:

WINUSERAPI
BOOL
WINAPI
SetWindowTextA(
    __in HWND hWnd,
    __in_opt LPCSTR lpString);
WINUSERAPI
BOOL
WINAPI
SetWindowTextW(
    __in HWND hWnd,
    __in_opt LPCWSTR lpString);
#ifdef UNICODE
#define SetWindowText  SetWindowTextW
#else
#define SetWindowText  SetWindowTextA
#endif // !UNICODE

Я не могу точно сказать, почему то же самое происходит с вашей функцией GetMyClassName. Но это, вероятно, имеет ту же причину.

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