Проект gpl-2C

 

Документация\Уровень 0\Описание встроенного языка

Пред.

Содержание

 
1.5.13. Объект ФайлМетаданных (MetadataFile)

1.6. Расширение возможностей системы с помощью плагинов

1.6. Расширение возможностей системы с помощью плагинов

1.6.1. Введение

Данный документ описывает механизм создания встраиваемых компонент (далее по тексту – плагины) в платформу 2С версии  3  Минимальная требуемая версия плагинов должна быть не ниже 2 (версии ниже данного номера в систему 2С не загружаются).

Исходные файлы для создания плагинов содержатся в репозитарии cvs 2c/level0/Plugins

1.6.2. Механизм работы плагинов

 Система плагинов построена следующим образом - плагин представляет собой обычную dll-ку, экспортирующую функции:

PluginInfo - получение информации о плагине,

InitPlugin - инициализация,

DonePlugin -завершение работы

Файл плагина имеет расширение dll. При загрузке система ищет все *.dll файлы в каталоге программы и в каталоге SYSTEM программы (не путать с системным каталогом SYSTEM Windows) , для каждого файла выполняется вызов функции PluginInfo, если плагин поддерживается - выполняется InitPlugin (которая, например, регистрирует новые объекты, добавляет новые системные функции и пр.). Каждая функция в случае успешного выполнения должна вернуть TRUE(ненулевое значение), и FALSE (значение равное 0) при неудаче. При неудачном завершении одной из функций плагин тут же выгружается.

1.6.3. Создание плагинов

Заголовочные файлы для плагинов:

plugdetect.h – базовая поддержка механизма плагинов

dialogplugins.h – расширение механизма - поддержка создания диалоговых элементов

Для удобства использования заголовочных файлов от 2С реализован следующий механизм:
В плагине должен быть определен макрос IS_PLUGIN. В файле plugdetect.h определяется макрос FORPLUGIN в зависимости от наличия IS_PLUGIN: если IS_PLUGIN определен (компилируется плагин), то как _declspec(dllimport); а если нет (компилируется платформа 2С), то как _declspec(dllexport). FORPLUGIN ставится в заголовочных файлах 2С к определениям экспортируемых функции и методов (на данный момент это все методы CValue и CMethods) . Т.о., при использовании заголовков от 2С в плагине автоматически будет определен импорт необходимых функций. Кроме того, при компиляции 2С создается файл enterprise.lib, который также используется при компиляции плагина.

Экспортные функции плагина (также объявлены в plugdetect.h)
BOOL InitPlugin()
BOOL DonePlugin()
BOOL PluginInfo(PLUGIN_INFO*)

struct PLUGIN_INFO{
                size_t cb;                                                          //Размер структуры

                int VerNeed;                                                              //Необходимая версия обработчика

                CString                csTitle;                  //Имя плагина

                CString                csDescription;                     //Краткое описание, авторские права...

                HMODULE hmodule;                         //указатель на данную dll

                //остальные поля, если понадобятся.

};

При выполнении PluginInfo, плагин должен установить номер версии механизма плагинов, на основе которой он разработан. В случае если обработчик не поддерживает данную версию, плагин не загружается.

1.6.4. Версии отладки и релиза.

Из-за того, что для отладочной и финальной версии используются разные файлы dll MFC, то при их одновременном использовании могут возникать ошибки при операциях с классом CString, поэтому в отладочных версиях функции плагина автоматом дополняются суффиксом _D. Таким образом, отладочные плагины не загружаются в релиз версию 2С (и наоборот).