Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

25 Январь 2022, 01:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Какие интерфейсы UnoRuntime.queryInterface() поддерживает объект LibreOffice?  (Прочитано 2297 раз)
0 Пользователей и 1 Гость смотрят эту тему.
PaulEfremoff
Участник
**
Offline Offline

Сообщений: 10


« Стартовое сообщение: 8 Апрель 2021, 17:26 »

Насколько я понял, обычно это узнать нельзя. Есть такие варианты:
1. Долго рыться на свалке документации. UPD. Прошу прощения за свалку, с интерфейсами, слава богу, порядок. https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star.html
2. Надо насобирать полный список интерфейсов и все их поподставлять. Без лишних усилий такой список не получить (с eeigor не поспоришь).
3. Basic forever! obj.Dbg_SupportedInterfaces (спасибо за совет, sokol92) +
 UnoRuntime.queryInterface(XScriptProviderSupplier.class, xComponent).getScriptProvider()
   .getScript("vnd.sun.star.script:"+full_macros_name+"?language=Basic&location=document") //буквы Basic и document именно такие, иначе ошибка
   .invoke(aParams, /*aOutParamIndex */new short[1][1], /*aOutParam*/new Object[1][1]); //у меня нет выходных параметров
« Последнее редактирование: 10 Апрель 2021, 16:26 от PaulEfremoff » Записан
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 847



« Ответ #1: 8 Апрель 2021, 17:46 »

Мы используем инспектор объектов (Xray for StarBasic, MRI for Python). Там всё есть, и всё разложено по полочкам.
...но без лишних усилий точно не получится!


* Снимок экрана от 2021-04-08 17-52-45.png (125.06 Кб, 888x688 - просмотрено 19 раз.)
« Последнее редактирование: 8 Апрель 2021, 17:54 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.4.1 Community
sokol92
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 704


WWW
« Ответ #2: 8 Апрель 2021, 20:25 »

Можно получить, например, так:
Код:
' Возвращает массив интерфейсов, которые поддерживает объект obj.
Function ShowInterfaces(ByVal obj)
  Dim s As String, i As Long
  ShowInterfaces=Array()
  On Local Error GoTo errLabel
  
  s=obj.Dbg_SupportedInterfaces
  i=Instr(1, s, ":")
  If i>0 Then s=mid(s, i+1)
  While Left(s, 1)=Chr(10) Or Left(s, 1)=Chr(13)
    s=Mid(s, 2)
  Wend  
  ShowInterfaces=Split(Replace(s, " ", ""), Chr(10))
errLabel:
End Function

Sub TestShowInterfaces
  Msgbox Join(ShowInterfaces(ThisComponent), Chr(10))
End Sub

И, разумеется, более продвинутый способ - использовать theIntrospection.
« Последнее редактирование: 8 Апрель 2021, 20:36 от sokol92 » Записан

Владимир.
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!