QStringList QCoreApplication :: arguments () - в какой ситуации индекс 0 не путь к приложению в Windows? - PullRequest
1 голос
/ 22 июля 2010

Документация для QStringList QCoreApplication::arguments() (Qt) гласит:

Обычно arguments (). At (0) - это Имя программы, arguments (). at (1) - это первый аргумент и arguments (). last () это последний аргумент. см. Примечание ниже о Windows.

Далее уточняется:

В Windows [...] аргументы () построен из возвращаемого значения GetCommandLine (). В результате, строка, заданная arguments (). At (0) не может быть именем программы на Windows, в зависимости от того, как приложение было запущено.

Что касается последней выделенной жирным шрифтом части, мне любопытно, к какой ситуации это относится. В документации Qt это не объясняется, равно как и в документации GetCommandLine (WINAPI).

1 Ответ

4 голосов
/ 22 июля 2010

Это может произойти, когда ваша программа порождается с помощью CreateProcess - посмотрите описание параметра lpCommandLine .По сути, это программа, вызывающая CreateProcess, чтобы заполнить этот первый параметр, поэтому может случиться так, что значение не будет заполнено обычным способом.

По ссылке:

"ЕслиlpApplicationName и lpCommandLine не равны NULL, строка с нулевым символом в конце, на которую указывает lpApplicationName, указывает модуль для выполнения, а строка с нулевым символом в конце, на которую указывает lpCommandLine, указывает командную строку. Новый процесс может использовать GetCommandLine для получения всей команды.Консольные процессы, написанные на C, могут использовать аргументы argc и argv для разбора командной строки. Поскольку argv [0] - это имя модуля, программисты на C обычно повторяют имя модуля в качестве первого токена в командной строке. "

Аналогично, это может произойти, если ваша программа запускается из другой программы с использованием семейства функций spawn .Там документация гласит:

"По крайней мере один аргумент, либо arg0, либо argv [0], должен быть передан дочернему процессу. По соглашению, этот аргумент является копией аргумента pathname. Однакодругое значение не приведет к ошибке. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...