Перейти к содержанию

Создание блоков

Под [GUID] подразумевается уникальный идентификатор. Его можно сгенерировать, например, при помощи InsertGuid (Visual Studio) или командлета New-Guid в PowerShell.

Описание контейнера блоков

Перед классом с блоками необходимо поставить атрибут:

[ActionsContainer(
    "[GUID]",
    Name = "TestAction", //имя контейнера
    Category = "Test", //категория блоков в обозревателе инструментов программы
    Lifetime = InstanceLifetime.Singleton)]
//в этом классе каждый размещенный метод - блок, который будет доступен из панели инструментов Программы
public class Action
{
    //присваиваем идентификатор блоку, именуем блок
    [Action("[GUID]", Name = "CustomDivision")] 
    //присваиваем идентификатор return параметру функции
    [return: OutputArgument("[GUID]")] 
    public bool CustomDivision(
    //присваиваем идентификатор переменной a
    [InputArgument("[GUID]")]
    double a,
    [InputArgument("[GUID]")]
    double b,
    [OutputArgument("[GUID]")]
    out double c)
    {
        if (b == 0)
        {
            c = Double.NaN;
            return false;
        }

        c = a / b;
        return true;
    }

Описание блока с вызовом DLL

Опишем блок, который вызывает сообщение в системном окне. Для примера испозьлзуется библиотека user32.dll, которая доступна только для Windows.

//импортируем библиотеку
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
//подготавливаем окно
public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType);

//присваиваем идентификатор блоку, именуем блок
[Action("[GUID]", Name = "CustomMessage")] 
public void CustomMessage(
[InputArgument("[GUID]")]
string message,
[InputArgument("[GUID]")]
string caption)
{
    //тело блока: вызываем окно с переданными аргументами
    MessageBox(IntPtr.Zero, message, caption, 0); 
}

Добавление класса с описанием плагина

Этот класс нужен для того, чтобы понять какой класс является контейнером для блоков, какие действия выполнить при регистрации и деактивации.

//создаем класс, обязательно наследуясь от базового
public class EPlugin : EPluginBase 
{
    //переписываем метод регистрации
    public override void Register(IEmikaRegistry registry) 
    {
        //регистриуем класс-контейнер
        registry.AddActions(typeof(Action)); 
    }

    //перепиываем метод деактивации
    public override void Unregister(IEmikaRegistry registry) 
    {
        //деактивируем класс-контейнер
        registry.RemoveActions(typeof(Action));
    }
}

После сборки проекта с плагином и добавления .dll файла плагина в Эмику, в списке инструментов появятся доступные для использования в программе блоки CustomDivision и CustomMessage.

Загрузить готовый проект из статьи