Плагин представляет собой динамически загружаемую библиотеку (DLL). После установки программы все плагины, входящие в дистрибутив, помещаются в каталог c:\Program Files (x86)\Common Files\Soft Gold\Inventory 14\Plugins\... Расширение *.abl необходимо для автоматической загрузки плагина из указанного каталога при запуске приложения. Плагин также можно загрузить из любого другого места на диске, указав в настройках путь поиска.
Инициализация API плагина
{************************************************************}
{ Delphi VCL Extensions }
{ }
{ Plugin interface for ABViewer/Inventory }
{ }
{ Copyright (c) 2002-2010 SoftGold software company }
{ }
{************************************************************}
unit sgPluginItem;
interface
...
implementation
…
var
XMLDocRef: IXMLDocument = nil;
ClientRef: IXMLNode = nil;
…
var
P: Pointer = nil;
PluginsHostWnd: HWND = 0;
PluginsHostWndName: string = '';
XMLAtomString: string = '';
procedure InitializeDoc;
begin
// получение уникального имени класса окна с параметрами
PluginsHostWndName := Format('TsgPluginsHost:%.8X:%.8X', [GetCurrentProcessId, GetCurrentThreadID]);
// нахождение непосредственно окна
PluginsHostWnd := FindWindow(PChar(PluginsHostWndName), nil);
if PluginsHostWnd <> 0 then
begin
// получение строки атома для получения параметра xml документа
XMLAtomString := Format('XMLOfs%.8X%.8X',
[GetWindowLong(PluginsHostWnd, GWL_HINSTANCE),
GetWindowThreadProcessId(PluginsHostWnd)]);
// получение ссылки на xml документ
XMLDocRef := IXMLDocument(GetProp(PluginsHostWnd, PChar(XMLAtomString)));
if Assigned(XMLDocRef) then
begin
// добавление элемента <Client> в список
ClientRef := XMLDocRef.DocumentElement.ChildNodes[sSession].ChildNodes[sClients].AddChild(sClient);
// инициализация адреса функции Invoke
ClientRef.ChildValues['Invoke'] := IntToId(Integer(@Invoke)); // шестнадцатиричное $XXXXXXXX
end;
end;
end;
initialization
CoInitialize(P);
InitializeDoc;
...
Настройка и запуск демонстрационной версии плагина
Демонстрационная версия плагина настраивается автоматически при установке программы и подключается сразу после запуска Inventory. В состав пакета входит исходный текст компонента (имя проекта sgPlugin.dpk) и демонстрационная версия плагина (имя проекта plug1.dpr).
Порядок запуска плагина из режима отладки:
▪Открыть C:\Users\USER_NAME\Documents\Inventory 14\Plugins\Source\Delphi\Demos\Plug1\plug1.dpr
▪Установить в опциях проекта:
Search Path: «..\..\Components\PlugItem»;
Output derectory, например: «c:\Program Files\Common Files\Soft Gold\Inventory 14\Plugins»;
Host application, на вновь установленное приложение, например: «c:\Program Files\Soft Gold\Inventory 14\Inventory 14.exe».
▪Запустить на выполнение.
Для использования компонента в designtime необходимо открыть, перебилдить и инсталировать C:\Users\USER_NAME\Documents\Inventory 14\Plugins\Source\Delphi\Components\PlugItem\sgPlugin.dpk. После инсталяции компонента, в палитре компонентов Delphi, на закладке Soft Gold появится компонент TsgPluginItem, который можно использовать в designtime, т.е. помещать на форму.
Перейти на страницу Inventory