API плагин

  Плагины... >

API плагин

Previous pageReturn to chapter overviewNext page

Плагин представляет собой динамически загружаемую библиотеку (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