Проект gpl-2C |
Документация\Уровень 0\Описание встроенного языка |
Пред. | ||
1.5.13. Объект ФайлМетаданных (MetadataFile) |
1.6. Расширение возможностей системы с помощью плагинов |
1.6. Расширение возможностей системы с помощью плагинов
Данный документ описывает механизм создания встраиваемых компонент (далее по тексту – плагины) в платформу 2С версии 3 Минимальная требуемая версия плагинов должна быть не ниже 2 (версии ниже данного номера в систему 2С не загружаются).
Исходные файлы
для создания плагинов содержатся в
репозитарии cvs 2c/level0/Plugins
Система плагинов
построена следующим образом - плагин
представляет собой обычную 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, плагин
должен установить номер версии механизма
плагинов, на основе которой он разработан. В
случае если обработчик не поддерживает
данную версию, плагин не загружается.
Из-за того, что для отладочной и финальной версии используются разные файлы dll MFC, то при их одновременном использовании могут возникать ошибки при операциях с классом CString, поэтому в отладочных версиях функции плагина автоматом дополняются суффиксом _D. Таким образом, отладочные плагины не загружаются в релиз версию 2С (и наоборот).