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

  • Гудаури – начало

    Закончился тут в воскресенье отпуск недельный, как оказалось – маловато, но тож ничего 🙂 Ездили мы толпой в 6 человек в Грузию, на горнолыжный курорт Гудаури в одноимённом селе, что в 110 км от Тбилиси. Отдохнули замечательно, я об этом ещё попробую написать/показать, а про саму Грузию могу сказать, что похоже, действительно правда – криминала…

  • Навеяно слонменами и бетменами

    Народ, если вы знаете, что бедмена нету, то почему вы решили, что все остальное должно существовать на самом деле? Откуда идет гон на то, что таких костюмов не существует, машины так не прыгают, а телки тают от одного взгляда? ЗЫ: Ну и мысли с бодуна 🙂 Share this post: Share on X (Twitter) Share on…

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

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

  • Rollin

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

  • Countdown

    Итак, до вожделенного отпуска осталось около 3 дней. А тут ещё и ацкий кранч, из-за которого даже не успеваешь новости почитать (сейчас есть время написать, только потому что идёт полный ребилд проекта), впрочем это и неплохо, время пролетает намного быстрее. Недельный отпуск зимой – мечта работодателя. Отправляемся колонной из четырёх автомобилей на Буковель, будем распугивать…

  • IGDA в Киеве

    В следующую субботу (22 октября 2005) будет проходить конференция геймдевелоперов, надо бы сходить туда, посмотреть ну и себя показать возможно 🙂 Хочется киевскую геймдев коммьюнити увидеть вживую – главное только заранее договориться 🙂 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit