Как правильно определить независимую от 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
)