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 часа. Ацкое чувство однако – весь день сидишь и думаешь – скорее бы вечер, чтобы заснуть. Слон сцука дал мне игруху – теперь вся работа делается раза…

  • iAge of Hammer Wars

    Наш пспшный порт хаммерфайта теперь и на iPhone 🙂 Относительно недавно мы решили попробовать портировать псп-версию игры про молотки на айфон. Наверно самой большой проблемой у нас встала организация рабочего места – т.е. установка хакинтоша и подключение железки. Сам порт и адаптация арта заняли не так уж и много времени. Полторы недели назад мы отправили…

  • VisualStudio add-in progress

    В создании “мегаплагина” для компиляции проектов при помощи gcc наступил важный момент. Наконец-то я закончил первую версию, т.е. эта штука сумела скомпилять наш проект и поддерживает минимально функциональность старого кривого модуля, который писался как makefile project wrapper. Можно приступать к внутреннему тестированию. Ура!!!!!!! Следующая версия должна будет быть более функциональной и прилизаной, чтобы можно было…

  • Квейк 4

    Игрушка мне понравилась, прикольная и динамичная – именно то, что надо для того чтобы снять лишнее напряжение (ну пиво не считаем) Бегаем, крушим монстров, классные спецэффекты, напрягает только попытка мозга все время понять как они работают и как их спереть и сделать у себя 🙂 А потом я начал копаться в ресурсах игры. ЭТО ПЕСТЕТС!…

  • Ghost in the shell:SAC 2nd GIG

    Начал смотреть второй сезон сериала, мне показалось или он действительно стал более атмосферным киберпанком? Вообще пока нравится, прикольно так, затягивает зрелище, первый сезон не было такого желания смотреть как сейчас второй. Начинает мешать работать 🙂 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit