---
title: "Оформление прикладных библиотек типа ActiveX"
type: interface
api: [api7]
tags: [interface, api7, cr119224]
sources:
  - cr119224.html
  - ikompaslibrary.html
  - ikompaslibrarymenu.html
  - kskompaslibrary.html
---

*Создание прикладных библиотек *

В Компас v20 появилась возможность наследования от интерфейсов прикладной библиотеки.
Добавлена библиотека типов интерфейсов KompasLibrary.tlb с описанием нового дуального интерфейса прикладной ActiveX библиотеки IKompasLibrary и интерфейса ksKompasLibrary, который соответствует старому описанию функций для ActiveX библиотек.
В библиотеке можно реализовать наследование от нового или старого варианта интерфейсов.
Функции оформления библиотек типа ActiveX
Пример простейшей программы в среде VB, оформленной в виде ActiveX библиотеки КОМПАС


## Интерфейс IKompasLibrary

Интерфейс приложения Компас 3D.
Иерархия:
IDispatch
IKompasLibrary
Описание
Интерфейс позволяет реализовать функционал ActiveX приложения Компас 3D.
Версия: Компас v20


## BeginUnloadLibrary - Завершающие действия перед отключением библиотеки, отписка от событий

Синтаксис:
```
HRESULT BeginUnloadLibrary( VARIANT_BOOL * Result );
Возвращаемое значение:
Не используется
```
Примечание:
Приложение в данном методе должно отписаться от событий и освободить запомненные интерфейсы API Компас.


## ContextPanelStyleComboChanged - Изменение значения в стилевом комбобоксе всплывающей панели

Синтаксис:
```
HRESULT ContextPanelStyleComboChanged( BSTR StyleComboID, long styleType, long newValue, VARIANT_BOOL * Result );
Входные параметры:
StyleComboID    - cтроковый идентификатор стилевого комбобокса описанного в манифесте библиотеки,
styleType    - тип стилевого комбобокса из перечисления ControlTypeEnum.
Возвращаемое значение:
Не используется
```
Примечание:
Функция вызывается, если приложение подтвердило, что поддерживает работу данного метода (см. IKompasLibrary::IsFunctionEnable).


## CreateMacroFromSample - Создать объект по образцу

Синтаксис:
```
HRESULT CreateMacroFromSample( long MacroReference, VARIANT_BOOL * Result );
Входные параметры:
MacroReference    - идентификатор (reference) библиотечного макрообъекта
Возвращаемое значение:
Не используется
```
Примечание:
1. При запуске команды Объект по образцу одновременно с другими элементами КОМПАС-График будут подсвечиваться и библиотечные макрообъекты, если создавшая их библиотека подключена и поддерживает данную функцию. Подсвеченные макрообъекты могут быть выбраны в качестве образца, после чего управление передается в блок обработки библиотеки.
2. В блок обработки команды Объект по образцу передается идентификатор (указатель reference) выбранного макрообъекта. По этому указателю на макрообъект можно получить параметры макрообъекта, обработать их и запустить соответствующую команду библиотеки.
3. Функция вызывается, если приложение подтвердило что поддерживает работу данного метода (см. IKompasLibrary::IsFunctionEnable).


## DisplayLibraryName - Отображаемое имя приложения

Тип данных: BSTR
Синтаксис:
```
HRESULT DisplayLibraryName( BSTR * Result );
```
Примечание:
Свойство используется в случае отсутствия манифеста приложения.
Функция вызывается, если приложение подтвердило, что поддерживает работу данного метода (см. IKompasLibrary::IsFunctionEnable).


## FillContextPanel - Накачка всплывающей панели для библиотечных элементов

Синтаксис:
```
HRESULT FillContextPanel( LPDISPATCH ContextPanel, VARIANT_BOOL * Result );
Входные параметры:
ContextPanel    - указатель на интерфейс всплывающей панели IContextPanel.
Возвращаемое значение:
TRUE    - если были изменения контекстной панели,
FALSE    - использовать стандартную накачку панелей для данного библиотечного элемента.
```
Примечание
Функция вызывается, если приложение подтвердило, что поддерживает работу данного метода (см. IKompasLibrary::IsFunctionEnable).


## FillLibraryMenu - Динамическая накачка меню

Синтаксис:
```
HRESULT FillLibraryMenu( IKompasLibraryMenu * Menu, VARIANT_BOOL * Result );
Входные параметры:
Menu    - указатель на интерфейс меню приложения IKompasLibraryMenu.
Возвращаемое значение:
Не используется.
```
Примечание:
Метод используется, если меню библиотеки не объявлено в манифесте библиотеки.
Функция вызывается, если приложение подтвердило, что поддерживает работу данного метода (см. IKompasLibrary::IsFunctionEnable).


## GetDisableReason - Получить описание причины недоступности команды

Синтаксис:
```
HRESULT GetDisableReason( long Command, BSTR * Result );
Входные параметры:
Command    - номер команды приложения.
Возвращаемое значение:
- строка-пояснение с причиной недоступности команды.
```
Примечание:
Строка-пояснение удаляется функцией SysFreeString.
Функция вызывается, если приложение подтвердило, что поддерживает работу данного метода IKompasLibrary::GetLibraryCommandState (см. IKompasLibrary::IsFunctionEnable) и в функции IKompasLibrary::GetLibraryCommandState сделала команду недоступной.


## GetKompasConverter - Получить интерфейс конвертора

Синтаксис:
```
HRESULT GetKompasConverter( LPDISPATCH * Result );
Возвращаемое значение:
- указатель на интерфейс конвертера IKompasConverter.
```
Примечание:
Реализуется в библиотеках типа Converter.
Функция вызывается, если приложение подтвердило, что поддерживает работу данного метода (см. IKompasLibrary::IsFunctionEnable).


## GetLibraryCommandState - Получить текущее состояние команды

Синтаксис:
```
HRESULT GetLibraryCommandState( long Command, VARIANT_BOOL * Enable, long * Checked, VARIANT_BOOL * Result );
Входные параметры:
Command    - номер команды приложения.
Выходные параметры:
Enable    - доступность команды,
Checked    - состояние команды (нажата/отжата).
Возвращаемое значение:
Не используется
```
Примечание:
Функция возвращает состояние команды приложения.
Функция управляет состоянием команды в меню и панелях команд приложения.
Функция вызывается, если приложение подтвердило, что поддерживает работу данного метода (см. IKompasLibrary::IsFunctionEnable).


## InitLibrary - Инициализация библиотеки, подписка на события

Синтаксис:
```
HRESULT InitLibrary( LPDISPATCH ApplicationInterface, VARIANT_BOOL * Result );
Входные параметры:
ApplicationInterface    - интерфейс приложения Компас 3D.
Возвращаемое значение:
Не используется.
```
Примечание:
Параметр ApplicationInterface может быть указателем на интерфейс IApplication, если приложение поддерживает метод IKompasLibrary::IsOnApplication7, и этот метод вернул значение TRUE, т.е. библиотека работает на API версии 7. Во всех остальных случаях параметр ApplicationInterface будет указателем на интерфейс KompasObject.


## IsFunctionEnable - Признак поддержки приложением функций

Тип данных: BOOL
Синтаксис:
```
HRESULT IsFunctionEnable( ksKompasLibraryFunctionEnum FunctionID, VARIANT_BOOL * Result );
Входные параметры:
FunctionID    - Идентификатор функции из перечисления ksKompasLibraryFunctionEnum.
```
Примечание:
Приложение должно подтвердить, что оно поддерживает нужные ему функции.
Если приложение для какой то функции вернет FALSE. то данная функция вызываться не будет.


## IsOnApplication7 - Получить тип версии API, используемого библиотекой

Тип данных: BOOL
Синтаксис:
```
HRESULT IsOnApplication7( VARIANT_BOOL * Result );
```
Примечание:
Если библиотека поддерживает данный метод и возвращает TRUE, в функцию IKompasLibrary::InitLibrary передается интерфейс IApplication - иначе будет передаваться интерфейс KompasObject.


## LibraryHelpFile - Файл справки

Тип данных: BSTR
Синтаксис:
```
HRESULT LibraryHelpFile( BSTR * Result );
```
Примечание
Библиотека может определить файл справки, который требуется открывать при наведении на команды библиотеки и в библиотечных процессах.
Функция вызывается, если приложение подтвердило, что поддерживает работу данного метода (см. IKompasLibrary::IsFunctionEnable).
Если функция библиотекой не поддерживается, файл справки определяется по имени файла библиотеки с учетом текущей локализации.


## LibraryName - Имя приложения

Тип данных: BSTR
Синтаксис:
```
HRESULT LibraryName( BSTR * Result );
```
Примечание:
Свойство используется в случае отсутствия манифеста приложения.


## ProtectNumber - Номер ключа защиты

Тип данных: long
Синтаксис:
```
HRESULT ProtectNumber( long * Result );
```


## RunLibraryCommand - Выполнить команду библиотеки

Синтаксис:
```
HRESULT RunLibraryCommand( long Command, long DemoMode, long * Result );
Входные параметры:
Command    - номер команды приложения,
DemoMode    - признак деморежима: - 0 - обычный режим, - 1 - вызов из дистрибутивной задачи в деморежиме, - 2 - вызов из демоверсии.
Возвращаемое значение:
Не используется
```
Примечание:
При вызове команды библиотеки из меню панели инструментов или при редактировании библиотечного элемента по двойному нажатию кнопки мыши управление передается этому методу с номером выбранной команды.


## Version - Версия интерфейса

Тип данных: long
Синтаксис:
```
HRESULT Version( long * Result );
```
Примечание:
Свойство позволяет получить версию интерфейса, реализованного в библиотеке.
При доработках интерфейса в Компас версия интерфейса будет увеличиваться.
Новые методы для библиотек со старой версией вызываться не будут.


## Интерфейс IKompasLibraryMenu

Иерархия:
IDispatch
IKompasLibraryMenu
Описание:
Интерфейс используется в функции IKompasLibrary::FillLibraryMenu.
Версия: Компас v20


## AddMenuCommand - Создать объект по образцу

Синтаксис Automation:
```
BOOL AddMenuCommand( long Id, BSTR Title );
```
Синтаксис Com:
```
HRESULT AddMenuCommand( long Id, BSTR Title, BOOL * Result );
Входные параметры:
Id    - идентификатор команды,
Title    - отображаемое название команды.
Возвращаемое значение:
TRUE    - в случае успешного завершения,
FALSE    - в случае неудачи.
```


## AddSeparator - Добавить разделитель

Синтаксис Automation:
```
BOOL AddSeparator();
```
Синтаксис Com:
```
HRESULT AddSeparator( BOOL * Result );
Возвращаемое значение:
TRUE    - в случае успешного завершения,
FALSE    - в случае неудачи.
```


## AddSubMenu - Добавить подменю

Синтаксис Automation:
```
BOOL AddSubMenu();
```
Синтаксис Com:
```
HRESULT AddSubMenu( BSTR Title, BOOL * Result );
Входные параметры:
Title    - отображаемое название подменю.
Возвращаемое значение:
TRUE    - в случае успешного завершения,
FALSE    - в случае неудачи.
```


## EndSubMenu - Завершить создание подменю

Синтаксис Automation:
```
BOOL EndSubMenu();
```
Синтаксис Com:
```
HRESULT EndSubMenu( BOOL * Result );
Возвращаемое значение:
TRUE    - в случае успешного завершения,
FALSE    - в случае неудачи.
```


## Интерфейс ksKompasLibrary

Интерфейс приложения КОМПАС 3D (Старый вариант)
Иерархия:
IDispatch
ksKompasLibrary
Версия: Компас v20
ksKompasLibraryFunctionEnum - Идентификаторы функций приложений Компас 3D


## ContextPanelStyleComboChanged - Изменение значения в стилевом комбобоксе всплывающей панели

Синтаксис:
```
VARIANT_BOOL ContextPanelStyleComboChanged( BSTR StyleComboID, long styleType, long newValue );
Входные параметры:
StyleComboID    - строковый идентификатор стилевого комбобокса, описанного в манифесте библиотеки,
styleType    - тип стилевого комбобокса из перечисления ControlTypeEnum.
Возвращаемое значение:
Не используется.
```


## CreateMacroFromSample - Создать объект по образцу

Синтаксис:
```
VARIANT_BOOL CreateMacroFromSample( long MacroReference );
Входные параметры:
MacroReference    - идентификатор (reference) библиотечного макрообъектаl.
Возвращаемое значение:
Не используется.
```
Примечание:
1. При запуске команды Объект по образцу одновременно с другими элементами КОМПАС-График будут подсвечиваться и библиотечные макрообъекты, если создавшая их библиотека подключена и поддерживает данную функцию. Подсвеченные макрообъекты могут быть выбраны в качестве образца, после чего управление передается в блок обработки библиотеки.
2. В блок обработки команды Объект по образцу передается идентификатор (указатель reference) выбранного макрообъекта. По этому указателю на макрообъект можно получить параметры макрообъекта, обработать их и запустить соответствующую команду библиотеки.


## DisplayLibraryName - Отображаемое имя приложения

Синтаксис:
```
BSTR DisplayLibraryName();
Возвращаемое значение:
- отображаемое имя приложения.
```
Примечание:
Метод используется в случае отсутствия манифеста приложения.


## ExternalMenuItem - Динамическая накачка меню

Синтаксис:
```
BSTR ExternalMenuItem( [in] short Index, [out]short * ItemType, [out] short * Command );
Входные параметры:
Index    - индекс пункта меню.
Выходные параметры:
itemType    - тип пункта меню: - 0 - SEPARATOR (разделитель); - 1 - MENUITEM (строка с названием пункта меню); - 2 - POPUP (начало выпадающего подменю); - 3 (или любое другое число) - ENDMENU (конец меню\подменю).
command    - номер команды, если itemType = 1, или -1 во всех остальных случаях;
Возвращаемое значение
- текст пункта меню.
```


## ExternalRunCommand - Выполнить команду библиотеки

Синтаксис:
```
void ExternalRunCommand([in]short command, [in]short mode, LPDISPATCH ApplicationInterface );
Входные параметры:
command    - номер команды приложения,
mode    - признак деморежима: - 0 - обычный режим, - 1 - вызов из дистрибутивной задачи в деморежиме, - 2 - вызов из демоверсии;
ApplicationInterface    - Указатель на интерфейс приложения Компас 3D.
```
Примечание:
Параметр ApplicationInterface может быть указателем на интерфейс IApplication, если реализован метод ksKompasLibrary::IsOnApplication7, и этот метод вернул значение TRUE, т.е. библиотека работает на API версии 7. Во всех остальных случаях параметр ApplicationInterface будет указателем на интерфейс KompasObject.


## FillContextPanel - Накачка всплывающей панели для библиотечных элементов

Синтаксис:
```
VARIANT_BOOL FillContextPanel( LPDISPATCH ContextPanel );
Входные параметры:
ContextPanel    - указатель на интерфейс всплывающей панели IContextPanel.
Возвращаемое значение:
TRUE    - если были изменения контекстной панели,
FALSE    - использовать стандартную накачку панелей для данного библиотечного элемента.
```


## GetDisableReason - Получить описание причины недоступности команды

Синтаксис:
```
BSTR GetDisableReason( long Command );
Входные параметры:
Command    - номер команды приложения.
Возвращаемое значение:
- строка-пояснение с причиной недоступности команды.
```
Примечание:
Строка удаляется функцией SysFreeString.
Функция вызывается, если приложение в функции IKompasLibrary::GetLibraryCommandState сделало команду недоступной.


## GetHelpFile - Имя файла справки

Синтаксис:
```
BSTR GetHelpFile();
Возвращаемое значение:
- имя файла справки.
```
Примечание:
Библиотека может определить файл справки, который требуется открывать при наведении на команды библиотеки и в библиотечных процессах.
Если функция библиотекой не поддерживается, файл справки определяется по имени файла библиотеки с учетом текущей локализации.


## GetIKompasConverter - Получить интерфейс конвертора

Синтаксис:
```
LPDISPATCH GetIKompasConverter();
Возвращаемое значение:
- указатель на интерфейс конвертора IKompasConverter.
```


## GetLibraryName - Имя приложения

Синтаксис:
```
BSTR GetLibraryName();
Возвращаемое значение:
- имя приложения.
```
Примечание:
Метод используется в случае отсутствия манифеста приложения.


## GetProtectNumber - Номер ключа защиты

Синтаксис:
```
short GetProtectNumber();
Возвращаемое значение:
- номер ключа защиты.
```


## IsOnApplication7 - Получить тип версии API, используемого библиотекой

Синтаксис:
```
VARIANT_BOOL IsOnApplication7();
```
Примечание:
Если библиотека поддерживает данный метод и возвращает TRUE, в функцию ksKompasLibrary::ExternalRunCommand и ksKompasLibrary::LibInterfaceNotifyEntry передается интерфейс IApplication иначе передается интерфейс KompasObject.


## LibInterfaceNotifyDisconnect - Завершающие действия перед отключением библиотеки, отписка от событий

Синтаксис:
```
VARIANT_BOOL LibInterfaceNotifyDisconnect();
Возвращаемое значение:
Не используется.
```


## LibInterfaceNotifyEntry - Инициализация библиотеки, подписка на события

Синтаксис:
```
VARIANT_BOOL LibInterfaceNotifyEntry( LPDISPATCH ApplicationInterface );
Входные параметры:
ApplicationInterface    - интерфейс приложения Компас 3D.
Возвращаемое значение:
Не используется.
```
Примечание:
Параметр ApplicationInterface может быть указателем на интерфейс IApplication, если в приложении реализован метод ksKompasLibrary::IsOnApplication7, и этот метод вернул значение TRUE, т.е. библиотека работает на API версии 7. Во всех остальных случаях параметр ApplicationInterface будет указателем на интерфейс KompasObject.


## LibraryCommandState - Динамическая накачка меню

Синтаксис:
```
VARIANT_BOOL LibraryCommandState( long Command, VARIANT_BOOL * Enable, long * Checked );
Входные параметры:
Command    - номер команды приложения.
Выходные параметры:
Enable    - доступность команды.
Checked    - состояние команды (нажата/отжата).
Возвращаемое значение:
Не используется
```
Примечание:
Функция возвращает состояние команды приложения.
Функция управляет состоянием команды в меню и панелях команд приложения.
Если библиотека в каких-то случаях делает команды недоступными, рекомендуется реализовать также метод IKompasLibrary::GetDisableReason, где требуется возвращать строку-подсказку с причиной недоступности команды.
