Снегопат

Обсуждение Снегопата
Текущее время: 22 ноя 2024, 11:44

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Документация на IAddinLoader
СообщениеДобавлено: 26 май 2014, 21:31 
Не в сети

Зарегистрирован: 26 май 2014, 13:53
Сообщения: 83
Здравствуйте, коллеги.
Есть вопрос по интерфейсу IAddinLoader. Не нашел в описании API, что представляет собой этот интерфейс. Поиск по форуму говорит, что я такой не один: viewtopic.php?f=3&t=546&p=6120&hilit=IAddinLoader#p6120
Где взять описание этого интерфейса?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Документация на IAddinLoader
СообщениеДобавлено: 27 май 2014, 09:29 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Если просто состав методов - то можно просмотреть любым просмотрщиком библиотек типов, хоть в VBA от офиса.
В моих исходниках он описан так:
Код:
      [uuid("2BEEF9E6-AF34-4593-9E73-3D07EAA4CF0D"),version(1.0),nonextensible,helpstring("Интерфейс загрузчика аддинов")]
   interface IAddinLoader: IUnknown
   {
      meth(proto, "Получить название протокола загрузки")(_ret BSTR* result);
      meth(load, "Загрузить аддин")(_in BSTR uri, [out] BSTR* fullPath, [out] BSTR* uniqueName, [out] BSTR* displayName, _ret IUnknown** result);
      meth(canUnload, "Можно ли выгрузить аддин")(_in BSTR fullPath, _in IUnknown* addin, _ret VARIANT_BOOL* result);
      meth(unload, "Выгрузить аддин")(_in BSTR fullPath, _in IUnknown* addin, _ret VARIANT_BOOL* result);
      meth(loadCommandName, "Текстовое представление команды для загрузки")(_ret BSTR* result);
      meth(selectLoadURI, "Выбрать что загрузить")(_ret BSTR* result);
   };


Реализация этого интерфейса в своем аддине и регистрация объекта методом Designer::registerLoader позволяет расширить типы загружаемых снегопатом аддинов.
Вкратце по методам:

virtual HRESULT STDMETHODCALLTYPE proto(BSTR *result) = 0;
должен вернуть название "протокола", то есть начальной части до двоеточия строки-описания аддина.
По этой части снегопат определяет, какой загрузчик должен загрузить данный аддин.
Например, ваш загрузчик загружает аддины, которые начинаются с "1ceng:"
Значит, данный метод должен вернуть "1ceng".

virtual HRESULT STDMETHODCALLTYPE load(BSTR uri, BSTR *fullPath, BSTR *uniqueName, BSTR *displayName, IUnknown **result) = 0;
загружает аддин. В uri передается строка загрузки аддина. В fullPath, uniqueName, displayName - загрузчик должен вернуть
соответствующие данные об загруженном аддине. Сам метод должен вернуть IUnknown - объект, представляющий загруженный аддин.
Данный объект может дополнительно реализовывать интерфейсы IAddinMenu, IAddinMacroses, IAddinObject.

virtual HRESULT STDMETHODCALLTYPE canUnload(BSTR fullPath, IUnknown *addin, VARIANT_BOOL *result) = 0;
Должен сообщить, можно ли выгрузить данный аддин. Передается полный путь к аддину и объект аддина.

virtual HRESULT STDMETHODCALLTYPE unload(BSTR fullPath, IUnknown *addin, VARIANT_BOOL *result) = 0;
Выгрузить аддин, если это возможно.

virtual HRESULT STDMETHODCALLTYPE loadCommandName(BSTR *result) = 0;
Должен вернуть строку, описывающую команду в меню снегопата для загрузки аддинов данного типа.
Например, встроенный загрузчик длл реализует так:
Код:
HRESULT STDMETHODCALLTYPE DLLLoader::loadCommandName(BSTR *result)
{
   *result = SysAllocString(L"Загрузить dll|dll");
   return S_OK;
}

Строка состоит из двух частей, разделенных знаком "|".
Сначала идет текст команды меню, а затем название протокола загрузчика.

virtual HRESULT STDMETHODCALLTYPE selectLoadURI(BSTR *result) = 0;
Должен осуществить интерактивный выбор пользователем загружаемого аддина и вернуть строку - описание аддина.

В принципе, все методы, кроме proto и load, могут возвращать E_NOTIMPLEMENTED, если аддины не надо перезагружать либо
загружать интерактивно без addins.ini


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB