Assembler в Add-in

Разрабатывая аддин возникло желание добавить возможность просмотра ассемблерного кода для выбранного файла проекта – так же как это реализовано в CodeWarrior.
Для этого нам надо сделать следующее:

1. Добавить кнопку в контекстное меню файла.
2. Отдать компилятору на съедение выбранный файл
3. Создать окно отображения кода в студии
4. Вывести в это окно то, что нам отдал компилятор

Добавление кнопки.
Тут все просто, мы просто передираем код, любезно предоставленный нам Add-in Wizard когда мы создавали проект и меняем название и местоположение кнопочки 🙂
Единственным моментом является получение контекстного меню файла, это делается следующим образом:

_CommandBars cmdBars = (_CommandBars)_applicationObject.CommandBars;
CommandBar cmdBar = cmdBars[“Code Window”];
command.AddControl(cmdBar, 1);

Кормежка компилятора

Нам нужно получить название файла для скармливания – в данный момент мы делаем правый щелчок на открытом файле в текстовом редакторе и выбираем в нем нашу команду.
Имя файла получаем следующим образом:

_applicationObject.ActiveDocument.FullName;

Для того, чтобы компилятор сгенерировал нам ассемблерный код, мы запускаем его с ключем -S: gcc -S filename_cpp


ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = “psp-gcc”;
psi.Arguments = ” -S ” + filename;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;

Process.Start(psi);

Полученный файл с расширением .s будет лежать в текущей директории

Создание окна отображения кода в студии и вывод на экран.
Тут в принципе тоже ничего сложного.
_applicationObject.ItemOperations.OpenFile(asm_filename, Constants.vsViewKindCode);

Просто открываем файл, который нам сгенерировал компилятор.

Собсно вот и все 🙂

Similar Posts

  • Закрытие лыжного сезона 2

    Отдохнули оч хорошо, я бы сказал офигенно замечательно 🙂 Началось всё с того, что мы покурили кальян и в половине второго ночи попёрлись на Драгобрат в Карпаты. Сезон повторно закрыть, одного раза мало было 🙂 Приехали в Ясиня, пересели в газенваген и поднялись на Драг. Поселились, позавтракали и пошли кататься, правда не все. Некоторые решили…

  • Похоже сессия

    Похоже, что пришла ОНА! Сегодня, когда я узнал, что я не допущен к половине зачетов, то осознал, куда я попал и расслабился я рано, поэтому пришлось напрячься и целых 2 часа с Серегой учить вторую половину зачетов, которую после этого мы сдали слегка 🙂 Это были “Основы банковской деятельности”, за два часа я постиг великие…

  • The AI Dopamine Pit: How ‘Vibe Coding’ Is Slowing Me Down

    I was reflecting on my workflow with AI assistants recently and caught an interesting, and slightly frustrating, pattern in my own behavior. When I treat the AI as a focused tool, giving it specific commands like “refactor this function” or “explain this error,” the process is remarkably efficient. The work flows smoothly. But sometimes, in…

  • Румыния: день 4

    29.04.2008 Вторник, 11:00 (Синая) Мы покинули гостеприимную Синаю и взяли курс на Бузау – грязевые вулканы. Выходя из гостинницы мы встретили гидов и знакомых представителей Укррома, через которых мы, собственно, и открывали визы. Нам доверительно сообщили, что администрация посчитала нас очень тихими и спокойными (наверное они ещё не нашли прожжённый кальяном ковёр). Хотя, с другой…

  • Фотография

    Меня начала интересовать фотография, правда не настолько, чтобы покупать ацкую зеркалку за кучу баксов, но всё же. Изучаю всякие доки, очень полезно, оказывается, знать о композиции кадра – куда помещать главное, а куда второстепенное. Думаю, что очень важно даже для мыльничных фотографий – чтобы показ оных не вызывал у жертв желания сразу же закрыть альбом….

  • Диплом

    Вчера я защитил диплом, вроде даже на “отлично” 🙂 Интересно, что после того как я его защитил, мир не рухнул, не изменился и ничегошеньки не произошло 🙂 Наверно так и должно быть. Все равно, работу я нашел раньше, а больше после диплома ничего измениться и не должно было. Разве что интересно, как оно будет теперь…