Как правильно определить независимую от UNICODE функцию WinMain? - PullRequest
0 голосов
/ 22 февраля 2019

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

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

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

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

1 Ответ

0 голосов
/ 22 февраля 2019

В <tchar.h> макрос _tWinMain расширяется до WinMain или wWinMain в зависимости от настроек проекта.Это не достаточно, хотя;вам нужно объявить третий аргумент (lpCmdLine) с помощью charset-agnostic 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
)
...