Снегопат
https://snegopat.ru/forum/

Документация на IAddinLoader
https://snegopat.ru/forum/viewtopic.php?f=1&t=615
Страница 1 из 1

Автор:  EvilBeaver [ 26 май 2014, 21:31 ]
Заголовок сообщения:  Документация на IAddinLoader

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

Автор:  orefkov [ 27 май 2014, 09:29 ]
Заголовок сообщения:  Re: Документация на IAddinLoader

Если просто состав методов - то можно просмотреть любым просмотрщиком библиотек типов, хоть в 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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/