Командная строка Windows unicode argv

Итак, вступая в новое тысячелетие, я переписал свой код на C ++ следующим образом:

int main(int argc, wchar_t **argv)

Если он построен с опциями Unicode или MBCS, то когда приложение запускается с аргументом командной строки, либо напрямую, либо dbl -щелкните имена файлов, переданные в argv [], нечитаемые = в некоторой смеси китайских шрифтов.

Спасибо за комментарии - я постараюсь обобщить их здесь для поисковой системы.

  1. wmain (int argc, char ** argv) может использоваться только для приложения командной строки (подсистема: консоль)

  2. int winMain (int argc, wchar_t ** argv) работает для графического интерфейса пользователя (подсистема: окна), но графический интерфейс заменяет его собственной точкой входа. В случае Qt это не работает

    qtmaind.lib (qtmain_win.obj): error LNK2019: неразрешенный внешний символ _main, указанный в функции _WinMain @ 16

Решение, похоже, использует main (int arc, char ** argv) или main (int argc, wchar_t ** argv) , но игнорируйте argv. Затем вызовите QApplication с аргументом argv или NULL - аргумент игнорируется, поскольку Qt внутренне вызывает GetCommandLine ().
Затем используйте app.arguments, чтобы вернуть проанализированные аргументы.
Затем их можно преобразовать обратно в wchar с помощью строковых функций Qt, если это необходимо.

 QApplication app(argc, (char**)argv);  or  QApplication app(argc,NULL);  
 QStringList args = app.arguments();

Извините, я изначально не пометил этот Qt, потому что не думал, что это имеет отношение к делу.
Если кто-то хочет отредактировать это, чтобы также указать, как это сделать в MFC - сделайте это.

11
задан Martin Beckett 1 June 2012 в 17:39
поделиться