Project

General

Profile

Плагины

Плагины к системе 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


Кроме этих записей плагин может самостоятельно вносить в отладочный лог собственные записи.

Пример

Пример есть на этой страничке.

Add picture from clipboard (Maximum size: 742 MB)