Создание блоков
Под [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.