Мне нужно разобрать параметры Unicode, поэтому я хотел использовать wmain вместо.
Так что вместо
int main(int argc, char** argv)
Я хотел бы использовать
int wmain(int argc, wchar_t** argv)
Проблема в том, что Visual Studio не распознает wmain, и вместо этого она пытается использовать main:
error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup
Вот что я попробовал:
Изменение точки входа (в этом случае я получил много ошибок совместимости с библиотеками, которые даже не имеют точки входа, поэтому ее нельзя указать там).
warning LNK4258: directive '/ENTRY:mainCRTStartup' not compatible with switch '/ENTRY:mainWCRTStartup'; ignored
Вместо этого попробовал _tmain, просто чтобы узнать, что это просто макрос, который меняет его на main.
Ничего не помогает
Редактировать:
Я хотел бы отметить, что я использую набор инструментов vs120_xp (Win xp compatibilitybile), но когда я попытался использовать набор по умолчанию, он все еще не работал.
Edit2:
Я попытался сделать новый проект, и wmain работал там из коробки. Мне не нужно было ничего менять, так что это должен быть какой-то конкретный параметр в текущем проекте, который его вызывает.
Using the #pragma comment(linker, "/SUBSYSTEM:CONSOLE /ENTRY:mainCRTStartup")
Вы приближаетесь, не совсем близко. ЭЛТ имеет четыре точки входа:
Так что, это /ENTRY:wmainCRTStartup
Имейте в виду, что аргументы командной строки преобразуются в Unicode, используя кодовую страницу консоли по умолчанию. Что немного непредсказуемо, это устаревшая кодовая страница 437 OEM только в Западной Европе и Америке. Пользователю может понадобиться использовать команду CHCP (CHange Code Page) и поработать со шрифтом окна консоли, чтобы вы были довольны. YMMV.
Я объединял различия между новым проектом, который работал должным образом, и нашим проектом в течение нескольких часов, пока не обнаружил, что проблема вызвана нашей неправильной конфигурацией определений препроцессора allegro.
В глубине библиотеки allegro в win / alconfig.h есть такие строки
#ifndef ALLEGRO_NO_MAGIC_MAIN
#if defined _MSC_VER && !defined ALLEGRO_LIB_BUILD
#pragma comment(linker,"/ENTRY:mainCRTStartup")
#endif
#endif
Мы настроили этот макрос для компиляции библиотеки allegro, но файл allegro также был включен из основного проекта, в котором этот файл не указан.
Определение макроса в основном проекте решило проблему (очевидно).
Я действительно не видел этого прихода!