Какие интерфейсы UnoRuntime.queryInterface() поддерживает объект LibreOffice?

Автор PaulEfremoff, 8 апреля 2021, 17:26

0 Пользователи и 1 гость просматривают эту тему.

PaulEfremoff

Насколько я понял, обычно это узнать нельзя. Есть такие варианты:
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]); //у меня нет выходных параметров

eeigor

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

sokol92

#2
Можно получить, например, так:
' Возвращает массив интерфейсов, которые поддерживает объект 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.
Владимир.