Как правильно определить независимую от UNICODE функцию WinMain?

Как правильно определить UNICODE независимый WinMain функция для программы Windows, которая использует CRT?

Я склонен думать, что это должно быть что-то вроде

WINAPI
#ifdef UNICODE
  wWinMain
#else
  WinMain
#endif
 ( ... ) {
  ...
}

Тем не менее, мне интересно, если нет уже предопределенного макроса, который расширяется до правильного символа при компиляции исходных модулей (например, те, которые предлагаются в заголовочных файлах Windows, которые расширяются до WinApiFuncA или же WinApiFuncW,

1 ответ

Решение

В <tchar.h>макрос _tWinMain расширяется до WinMain или же wWinMain в зависимости от настроек проекта. Это не достаточно, хотя; вам нужно объявить третий аргумент (lpCmdLineс чарсет-агностиком LPTSTR тоже:

int APIENTRY _tWinMain(
    HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPTSTR lpCmdLine, 
    int nShowCmd
)

Если Unicode включен в проекте, это становится LPWSTR, поставив подпись:

int APIENTRY wWinMain(
    HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPWSTR lpCmdLine, 
    int nShowCmd
)

Если Unicode не включен, вы получаете подпись:

int APIENTRY WinMain(
    HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, 
    int nShowCmd
)
Другие вопросы по тегам