Моя предыдущая идея, видимо, слишком сложна для реализации в штатных приложениях Ирбис
. Но есть ещё одно предложение, касающееся нового функционала для разработчиков - то, что я, кстати, пока не смог сам реализовать в своём АРМе.
Я предлагаю добавить в Каталогизатор поддержку пользовательских плагинов, написанных с помощью управляемого кода, т.е. с помощью любого языка .NET. Ведь не секрет, что в настоящее время многие программисты предпочитают традиционным средам программирования, таким как Delphi, новые языки и среды разработки - VB.NET, C# и др. Я сам собираюсь переводить свой плагин библиоредактора на C#. Возникает проблема подключения таких подпрограмм, написанных на управляемых языках, к Ирбису (или любой другой системе с поддержкой плагинов традиционного типа).
Существует коммерческая система разработки плагинов, поддерживающая подобное межплатформное взаимодействие - [
www.remobjects.com], однако цена вопроса - 400 долларов. Свободных аналогов я не нашёл. Правда, управляемые плагины теоретически можно подключать к модулям, написанным на Delphi, C++ и др., с помощью бесплатной утилиты ExportDll, выложенной на [
www.codeproject.com], о чём я уже писал здесь - [
irbis.gpntb.ru]. Но как-то коряво выходит - все вызываемые извне подпрограммы приходится вручную помечать как управляемые, да и сама утилита требует настройки. Намного лучше было бы, если бы к самому АРМ Каталогизатор был привязан некоторый универсальный управляемый плагин-прослойка (DLL-ка на .NET), который уже в свою очередь позволял бы вызывать нужные методы из других DLL- или EXE-файлов.
Для поддержки .NET-плагинов можно было бы добавить в файл инициализации
Cirbisc.ini параметр вроде
UMDLLNETn - то же, что и
UMDLLn, но определяющий имя файла для управляемого приложения-плагина. В остальном способ подключения пользовательских модулей можно оставить без изменений. При выполнении каждого такого плагина можно было бы вызывать универсальную прослойку (назовём её, допустим, DLL2NET.DLL), в вызываемый метод которой (помеченный как неуправляемый средствами ExportDll) передавать, кроме переменных, отвечающих за входную и выходную записи, и размера буфера (buf1, buf2 : PChar; bufsize : Integer в интерфейсе на Delphi), ещё и два строковых значения - имя файла вызываемого плагина и имя его выполняемого метода (функции).
Конечно, это только один из возможных способов решения задачи. Возможно, есть и лучше. Но, в любом случае, как мне кажется, эта задача представляет определённый интерес.