Добавление коммутаторов командной строки
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Вы можете добавить переключатели командной строки, которые применяются к VSPackage при выполнении devenv.exe . Используется ProvideAppCommandLineAttribute для объявления имени коммутатора и его свойств. В этом примере параметр MySwitch добавляется для подкласса VSPackage с именем AddCommandSwitchPackage без аргументов и при загрузке VSPackage автоматически.
[ProvideAppCommandLine("MySwitch", typeof(AddCommandSwitchPackage), Arguments = "0", DemandLoad = 1)]
Именованные параметры показаны в следующих описаниях.
| Имя | Описание |
|---|---|
| Аргументы | Количество аргументов для коммутатора. Может быть «*» или список аргументов. |
| DemandLoad | Загрузите VSPackage автоматически, если для этого задано значение 1, в противном случае — значение 0. |
| HelpString | Строка справки или идентификатор ресурса строки для отображения с devenv /?. |
| Имя. | Переключатель. |
| PackageGuid | Идентификатор GUID пакета. |
Первое значение аргументов обычно равно 0 или 1. Специальное значение «*» можно использовать для указания того, что остальная часть командной строки является аргументом. Это может быть полезно для сценариев отладки, в которых пользователь должен передать командную строку отладчика.
Значение DemandLoad равно true (1) или false (0) указывает, что VSPackage должен загружаться автоматически.
Значение HelpString — это идентификатор ресурса строки, которая отображается в devenv /? Отображение справки. Это значение должно быть в форме «#nnn», где nnn является целым числом. Строковое значение в файле ресурсов должно заканчиваться новым символом строки.
Значение Name — это имя переключателя.
Значение PackageGuid — это GUID пакета, реализующего этот коммутатор. Интегрированная среда разработки использует этот GUID для поиска VSPackage в реестре, к которому применяется параметр командной строки.
Получение коммутаторов командной строки
При загрузке пакета можно получить переключатели командной строки, выполнив следующие действия.
- В реализации VSPackage SetSite вызовите QueryService SVsAppCommandLine для получения IVsAppCommandLine интерфейса.
- Вызов для GetOption получения параметров командной строки, введенных пользователем. В следующем коде показано, как узнать, был ли параметр командной строки MySwitch введен пользователем:
IVsAppCommandLine cmdline = (IVsAppCommandLine)GetService(typeof(SVsAppCommandLine)); int isPresent = 0; string optionValue = ""; cmdline.GetOption("MySwitch", out isPresent, out optionValue);
Вы несете ответственность за проверка для коммутаторов командной строки при каждой загрузке пакета.
Связанный контент
- IVsAppCommandLine
- SetSite
- Параметры командной строки для devenv
- Служебная программа CreatePkgDef
- . Pkgdef-файлы
11.11 – Аргументы командной строки
Как вы узнали из урока «0.4 – Введение в разработку на C++», при компиляции и компоновке программы на выходе получается исполняемый файл. Когда программа запускается, выполнение начинается с функции main() . До этого момента мы объявляли main следующим образом:
int main()
Обратите внимание, что эта версия main() не принимает параметров. Однако для работы со многими программами требуются какие-то входные данные. Например, предположим, что вы пишете программу под названием Thumbnail , которая считывает файл изображения, а затем создает миниатюру (уменьшенную версию этого изображения). Как Thumbnail узнает, какое изображение прочитать и обработать? Пользователь должен каким-то образом указать программе, какой файл открыть. Для этого вы можете использовать следующий подход:
// Программа: Thumbnail #include #include int main() < std::cout ; std::cin >> filename; // открываем файл изображения // создаем миниатюру // выводим миниатюру >
Однако при таком подходе есть потенциальная проблема. Каждый раз, когда программа запускается, она будет ждать, пока пользователь введет данные. Это может не быть проблемой, если вы запускаете эту программу один раз вручную из командной строки. Но это проблематично в других случаях, например, когда вы хотите запустить эту программу для многих файлов или запустить ее другой программой.
Давайте рассмотрим эти случаи подробнее.
Рассмотрим случай, когда вы хотите создать миниатюры для всех файлов изображений в заданном каталоге. Как бы вы это сделали? Вы можете запускать эту программу столько раз, сколько изображений в каталоге, печатая имя каждого файла вручную. Однако если бы изображений были сотни, это могло бы занять целый день! Хорошим решением здесь было бы написать программу, которая перебирает имя каждого файла в каталоге, вызывая Thumbnail один раз для каждого файла.
Теперь рассмотрим случай, когда вы запускаете веб-сайт и хотите, чтобы на вашем сайте создавался эскиз каждый раз, когда пользователь загружает изображение на ваш сайт. Эта программа не настроена для приема входных данных из Интернета, так как же человек, загружающий файл, будет вводить имя файла в этом случае? Хорошим решением здесь было бы, чтобы ваш веб-сервер автоматически вызывал Thumbnail после загрузки.
В обоих этих случаях нам нужен способ, чтобы внешняя программа могла передавать имя файла в качестве входных данных для нашей программы Thumbnail при ее запуске, а не заставлять Thumbnail ждать после запуска, пока пользователь введет имя файла.
Аргументы командной строки – это необязательные строковые аргументы, которые операционная система передает программе при ее запуске. Затем программа может использовать их в качестве входных данных (или игнорировать). Подобно параметрам функции, которые позволяют функции предоставлять входные данные для другой функции, аргументы командной строки позволяют людям или программам предоставлять входные данные программе.
Передача аргументов командной строки
Исполняемые программы можно запускать из командной строки, вызывая их по имени. Например, чтобы запустить исполняемый файл » WordCount «, который находится в корневом каталоге диска C: на компьютере с Windows, вы можете ввести:
C:\>WordCount
Чтобы передать аргументы командной строки в WordCount , мы просто перечисляем их после имени исполняемого файла:
C:\>WordCount Myfile.txt
Теперь при выполнении WordCount Myfile.txt будет предоставлен в качестве аргумента командной строки. Программа может иметь несколько аргументов командной строки, разделенных пробелами:
C:\>WordCount Myfile.txt Myotherfile.txt
Это также работает и в других операционных системах командной строки, таких как Linux (хотя приглашение и структура каталогов, несомненно, будут отличаться).
Если вы запускаете свою программу из среды IDE, в среде IDE должен быть предусмотрен способ ввода аргументов командной строки.
В Microsoft Visual Studio кликните правой кнопкой мыши на своем проекте в обозревателе решений и выберите «Свойства» (Properties). В открывшемся окне разверните дерево «Свойства конфигурации» (Configuration Properties) и выберите «Отладка» (Debugging). На правой панели есть строка с названием «Аргументы команды» (Command Arguments). Вы можете ввести туда аргументы командной строки для тестирования, и они будут автоматически переданы вашей программе при ее запуске.

В Code::Blocks выберите «Project» (Проект) → «Set program’s arguments» (Установить аргументы программы).

Использование аргументов командной строки
Теперь, когда вы знаете, как предоставить программе аргументы командной строки, следующим шагом будет доступ к ним из нашей программы на C++. Для этого мы используем другую форму main() . Эта новая форма main() принимает два аргумента (по соглашению названные argc и argv ) следующим образом:
int main(int argc, char *argv[])
Иногда вы также можете увидеть и такое:
int main(int argc, char** argv)
Несмотря на то, что они обрабатываются одинаково, мы предпочитаем первое представление, потому что его интуитивно легче понять.
argc – это целочисленный параметр, содержащий счетчик числа аргументов, переданных программе ( argc = argument count, число аргументов). argc всегда будет не меньше 1 потому, что первым аргументом всегда является имя самой программы. Каждый аргумент командной строки, предоставляемый пользователем, приведет к увеличению argc на 1.
argv – это место, где хранятся фактические значения аргументов ( argv = argument values, значения аргументов, хотя на самом деле расшифровывается как «argument vectors»). Хотя объявление argv выглядит устрашающе, на самом деле argv представляет собой просто массив строк в стиле C. Длина этого массива – argc .
Давайте напишем короткую программу с именем MyArgs для вывода значений всех параметров командной строки:
// Программа: MyArgs #include int main(int argc, char *argv[]) < std::cout ; count < argc; ++count) < std::cout return 0; >
Теперь, когда мы вызываем эту программу ( MyArgs ) с аргументами командной строки » Myfile.txt » и » 100 «, вывод будет следующим:
There are 3 arguments: 0 C:\MyArgs 1 Myfile.txt 2 100
Аргумент 0 – это путь и имя текущей запущенной программы. Аргументы 1 и 2 в данном случае – это два параметра командной строки, которые мы передали.
Работа с числовыми аргументами
Аргументы командной строки всегда передаются в виде строк, даже если предоставленное значение является числовым. Чтобы использовать аргумент командной строки в качестве числа, вы должны преобразовать его из строки в число. К сожалению, C++ делает это немного сложнее, чем должно быть.
В C++ это можно сделать следующим образом:
#include #include // для std::stringstream #include int main(int argc, char *argv[]) < if (argc " " // устанавливаем переменную строкового потока с именем convert, // инициализированную входными данными из argv[1] std::stringstream convert< argv[1] >; int myint<>; if (!(convert >> myint)) // выполняем преобразование myint = 0; // если преобразование не удалось, //установим для myint значение по умолчанию std::cout
При запуске с вводом » 567 » эта программа печатает:
Got integer: 567
std::stringstream работает так же, как std::cin . В этом случае мы инициализируем его значением argv[1] , и поэтому можем использовать operator>> для извлечения значения в целочисленную переменную (так же, как и с std::cin ).
Подробнее о std::stringstream мы поговорим в следующей главе.
Операционная система анализирует аргументы командной строки первой
Когда вы вводите что-то в командной строке (или запускаете свою программу из IDE), операционная система должна преобразовать и направить этот запрос соответствующим образом. Это не только включает в себя запуск исполняемого файла, но также включает анализ любых аргументов, чтобы определить, как они должны обрабатываться и передаваться приложению.
Как правило, в операционных системах действуют особые правила обработки специальных символов, таких как двойные кавычки и обратный слеш.
MyArgs Hello world!
There are 3 arguments: 0 C:\MyArgs 1 Hello 2 world!
Обычно строки, переданные в двойных кавычках, считаются частью одной строки:
MyArgs "Hello world!"
There are 2 arguments: 0 C:\MyArgs 1 Hello world!
Если вы хотите включить двойную кавычку в состав строки, вам нужно поставить перед двойной кавычкой обратный слеш:
MyArgs \"Hello world!\"
There are 3 arguments: 0 C:\MyArgs 1 "Hello 2 world!"
Заключение
Аргументы командной строки предоставляют пользователям и другим программам отличный способ передать входные данные в программу при запуске. Рассмотрите возможность использования любых входных данных, необходимых для работы программы при запуске, в качестве параметров командной строки. Если они не будут переданы через командную строку, вы всегда можете обнаружить это и попросить пользователя ввести данные. Таким образом, ваша программа сможет работать в любом случае.
Передача аргументов командной строки
Здравствуйте! Только начинаю изучать С++ и ещё не освоилась в Visual Studio. Хочу программе передать аргументы (строку, например), как это сделать в Visual Studio?
Отслеживать
51.4k 86 86 золотых знаков 267 267 серебряных знаков 505 505 бронзовых знаков
задан 23 мар 2012 в 17:30
1 1 1 серебряный знак 2 2 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию

Спасибо всем:) ответ на мой вопрос на рисунке.
Отслеживать
ответ дан 3 июн 2015 в 14:00
21 2 2 бронзовых знака
- Выбрав проект в Обозревателе решения, в меню Проект выберите команду Свойства.
- Перейдите на вкладку Отладка.
- В поле Аргументы командной строки введите аргументы командной строки, которые будут использоваться.
Отслеживать
ответ дан 23 мар 2012 в 17:42
34.5k 26 26 золотых знаков 98 98 серебряных знаков 214 214 бронзовых знаков
- c++
- visual-studio
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.9.3159
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Доступ к аргументам командной строки в C#
![]()
В статье рассмотрены два основных подхода, доступных “из коробки” в C# , которые можно использовать для работы с аргументами командной строки.
- Запуск приложения с аргументами
- Запуск приложения с аргументами в режиме отладки в Visual Studio
- Работа с аргументами командной строки
- Классический способ
- Использование System.Environment
Запуск приложения с аргументами
Дополнительные аргументы у программ могут быть использованы для указания на входные данные, которые нужно обработать, задания параметров, определяющих ее функционирование и т.п. Если вы работали с каким-нибудь консольным приложением, то, наверняка, сталкивались с этим.
Например, в Linux , команда просмотра содержимого каталога ls при запуске с параметром -l представит содержимое в виде списка. Утилите cat нужно передать в качестве аргумента имя файла, вот так: cat some_file.txt , и она выведет его содержимое в окно консоли. В Windows консоль используется не так активно, как в Linux , но и тут практически у всех приложений такого типа есть специальные ключи, например, аналог команды ls , команда dir может быть запущена с ключом /b следующим образом: dir /b , в результате будут показаны только названия каталогов, файлы будут пропущены. Графические приложения тоже могут иметь аргументы, для их использования, как правило, создается ярлык, запускающий приложение, в свойствах которого, в поле “Объект” указываются необходимые аргументы.
Запуск приложения с аргументами в режиме отладки в Visual Studio
При разработке в Visual Studio, для запуска приложения в режиме отладки с различными аргументами, необходимо их предварительно указать в свойствах проекта, для этого:
- В окне “ Solutions ” нажмите правой кнопкой на узел проекта и выберите в меню поле свойства – “ Properties ”.
- В появившемся окне перейдите на вкладку Debug.
- Аргументы, с которыми будет запущено приложение в режиме отладки, можете указать в области Command line arguments .
Работа с аргументами командной строки
Классический способ
Чаще всего с аргументами командной строки приходится работать, если вы разрабатываете консольное приложение. В этом случае, доступ к переданным аргументам проще всего получить через переменную args, которая является аргументом метода Main , вызываемого по-умолчанию первым при старте приложения. Если, конечно, вы не изменили данное поведение. Вот пример кода, в рамках которого выводятся в консоль переданные приложению аргументы.
using System; namespace ConsoleApp1 < class Program < static void Main(string[] args) < Console.WriteLine("Work with args directly:"); foreach (string arg in args) < Console.WriteLine(arg); >Console.ReadKey(); > > >Использование System.Environment
Если вы разрабатываете графическое приложение с использованием Windows Forms или WPF , то для работы с аргументами командной строки лучше воспользоваться функцией GetCommandLineArgs() из System.Environment , она возвращает список аргументов в виде массива строк. Пример использования представлен ниже.
using System.Windows.Forms; namespace WindowsFormsApp1 < public partial class Form1 : Form < public Form1() < InitializeComponent(); foreach(string s in System.Environment.GetCommandLineArgs()) < MessageBox.Show(s); >> > >