Плагины¶
- Table of contents
- Плагины
Плагины к системе Digispot II бывают двух типов - оконные и без оконные. Оконные плагины функционируют как обычные модули Джина. Безоконные плагины не имеют окон и просто существуют в системе.
Оба типа плагинов взаимодействуют с приложением и, возможно, другими плагинами через Digispot Managed API.
Создание в VID файле¶
Оконные плагины¶
Для создания оконного плагина необходимо включить в VID файл строку
CREATE_NET_WND_PLUGIN ID FILE TYPE
Где
- ID - идентификатор объекта в системе Digidpot II
- FILE - путь к файлу, в котором плагин реализован, если путь относительный, то он читается от каталога, где находится запускаемое приложение
- TYPE - тип (класс) создаваемого объекта. Это должен быть публичный тип, имеющий публичный конструктор без параметров и унаследованный от следующих интерфейсов:IBasePlugin, IWindowPlugin. Тип указывается полностью, с указанием пространств имен.
Например:
CREATE_NET_WND_PLUGIN PlanPlug ManagedPlugins.dll Digispot.ManagedPlugins.Plan.PlansEditor
В дальнейшем созданный объект должен быть расположен на некоторой области графического интерфейса (view) по аналогии с обычными модулями - базой данных, редактором расписаний, плеером и пр.
Внимание:указанный ID является идентификатором служебного модуля, создающего плагин. При необходимости обратится непосредственно к плагину при адресации событий необходимо добавить к идентификатору "-Plugin".
В приведенном выше пример адрес плагина в системе событий: !PlanPlug-Plugin.
Безоконные плагины¶
Безоконный плагин не имеет собственного графического интерфейса. Для создания оконного плагина необходимо включить в VID файл строку
CREATE_NET_PLUGIN ID FILE TYPE
Где
- ID - идентификатор объекта в системе Digidpot II
- FILE - путь к файлу, в котором плагин реализован, если путь относительный, то он читается от каталога, где находится запускаемое приложение
- TYPE - тип (класс) создаваемого объекта. Это должен быть публичный тип, имеющий публичный конструктор без параметров и унаследованный от следующих интерфейсов: IBasePlugin. Тип указывается полностью, с указанием пространств имен.
Например:
CREATE_NET_PLUGIN kra_disp managedplugins.dll Kra.Dispatcher
Данной строчки достаточно для создания объекта.
В отличии от оконного объекта:
- других строк не требуется
- указанный идентификатор является непосредственным идентификатором плагнина.
Дополнительные параметры в VID файле¶
В зависимости от типа создаваемого объекта для его работы может потребоваться указать дополнительные, специфичные для данного плагина, параметры. (Для этого плагин должен реализовать интерфейс IConfigMember).
Для установки дополнительных параметров в файл необходимо, после строки создания плагина, включить строку (строки) вида:@ @
SET_OBJ_BASE ID param_1 param_2 param_3 ... param_i
где:
- ID - это идентификатор, указанный при создании плагина (без добавления -Plugin)
- param_1 … param_i - множество строк-параметров, разделенных пробелами. Смысл и количество параметров определяются плагином и должны быть указаны в его описании. При необходимости передать в качестве одного параметра строку с пробелом внутри, ее нужно заключить в двойные кавычки.
например
SET_OBJ_BASE kra_disp WholeScale 40
SET_OBJ_BASE kra_disp Labels "12, 6, 3, 0, -3, -6, -12, -20"
Динамическая компиляция¶
Плагины могут создаваться не только из готовых сборок .NET, но и из исходных текстов программ.
При этом должны соблюдаться следующие условия
* файл исходного текста программы должен быть на языке C# (расширение должно быть .cs) или VB.NET (расширение должно быть .vb)
* файлы компилируются с версией .NET 3.5
* при компиляции в качестве зависимостей (references) указываются:
* System.dll
* System.Windows.Forms.dll
* cmn[d].dll
* выполняемое приложение
- при необходимости включить дополнительные зависимости необходимо в начале текста программы включить строчку комментария (// для C# и ’ для VB) особого вида
//InlineReference:System.Core.dll
В данном случае включается дополнительная библиотека System.Core.dll
Отладочный лог¶
При создании плагинов в отладчный лог, в поток MAIN, вносятся следующие записи:
- После успешной компиляции (только для исходных текстов)
@ MAIN @ Plugins @ D:\s\#CURRENT\EXE\SYSTEM\ind_test.cs successfully compiled. References:System.dll,System.Windows.Forms.dll,D:\s\#CURRENT\EXE\Cmnd.dll,D:\s\#CURRENT\EXE\Cmnd.dll @ Main
- После успешной загрузки сборки:
@ MAIN @ Plugins @ Assembly successfully loaded:D:\s\#CURRENT\EXE\ManagedPlugins.dll @ Main
- После успешного создания плагина
@ MAIN @ Plugins @ Object created. File:D:\s\#CURRENT\EXE\SYSTEM\ind_test.cs, class:TractPlugin.Windowless @ Main
В случае возникновения ошибок при создании плагина они выводятся в стандартное окно ошибок и дополнительно сохраняются в отладочном логе.
Например:
@ ERR_MSG @ ASSERT @ .\ManagedPlugin.cpp Line:791 ProcessConfig returned false:mirror LeftFlash LeftFlash2 @ Main
или
@ ERR_MSG @ ASSERT @ .\ManagedPlugin.cpp Line:797 Falied to call ProcessConfig.
Str:FallMult 0.25
Exception:System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Single.Parse(String s, NumberStyles style, NumberFormatInfo info)
at System.Convert.ToSingle(String value)
at Kra.Dispatcher.ProcessConfig(String[] strings) in D:\s\#CURRENT\COMPONENTS\ManagedPlugins\KRA\KraDispatcher.cs:line 323
at NativeWindowlessPlugin.ProcessConfig(NativeWindowlessPlugin* , CStringT<char\,StrTraitMFC_DLL<char\,ATL::ChTraitsCRT<char> > >** str_arr, Int32 cnt) @ Main
Кроме этих записей плагин может самостоятельно вносить в отладочный лог собственные записи.
Пример¶
Пример есть на этой страничке.