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

  • Отдых

    Съездил я тут на длинные выходные к бабушке. Харашо-то как Машенька…(с) Свежий воздух, никакого тебе шума, старые друзья-приятели – Идиллия прям. Аж уезжать не хотелось. Вообще, надо стараться как можно чаще, и желательно подольше, всё-таки вырваться из города, так как и отдыхаешь, и понимаешь, насколько город тебя зазомбировал и забетонировал 🙂 Вернулся, а тут ждёт…

  • Отчёт: Румыния 26.04.2008 – 1.05.2008 (день первый)

    Пролог На майские праздники составом из трёх человек (среди которых две дамы), мицу-клубников мы совершили тур на машине (mitsubishi lancer 9) по Румынии и Украине, 5 дней там и 4 здесь. Суммарно накатали 4300 километров, из которых 2500 пришлись на Румынию, средний расход бензина составил 6.2/100 по загранице и 7.3/100 по родине. Ночевали в гостинницах,…

  • Чуток наболело (С++)

    Давно я, что-то не постил ничего 🙂 Вот читаю я разные форумы, каналы чатов и возникает у меня вопрос – почему так много людей зациклились на С++? Это отличный язык для решения своих задач, но когда на нём начинают извращаться метапрограммированием, или пишут адские обёртки, обвязки для типа Pure OOP – зачем? Если очень хочется…

  • Новый нетбук

    Нахлынуло на меня недавно желание “апгрейднуть” свой нетбук. Старый MSI Wind U100 с атомом внутри и 2ГБ памяти как-то уж очень медленно всё пережёвывал, а жил всего полтора часа от силы…
    И вот я купил новый аппарат под названием Gigabyte Q1105…

  • Пешеходная жизнь

    Ездил я сплавляться на Тису в закарпатье, машину не успел поставить в гараж, поэтому попросил сделать это отца, он сделал. Когда я приехал, и на следующий день собрался на работу, то обнаружил, что папик оставил ключи и техпаспорт, но цинично упёр ключ от гаража на работу вместе с собой. Скажу я – ездить на маршрутке,…

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

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