2017-08-30 103 views
0

反射返回com.sun.star.uno.XInterface類型的<code>getType</code>方法應該返回其表示傳遞到方法的項的類型的對象中的所有對象

var serviceManager = new ActiveXObject('com.sun.star.ServiceManager'); 
var desktop = serviceManager.createInstance("com.sun.star.frame.Desktop"); 
var document = desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, []); 
var coreReflection = serviceManager.createInstance("com.sun.star.reflection.CoreReflection"); 

// should return a type representing the com.sun.star.frame.Desktop type 
var classInfo = coreReflection.getType(desktop); 

然而,classInfo似乎總是包含com.sun.star.uno.XInterface類型:

// outputs com.sun.star.uno.XInterface 
WScript.Echo(classInfo.getName()); 

即使我通過在其他物體,輸出是一樣的:

classInfo = coreReflection.getType(document); 
WScript.Echo(classInfo.getName()); 

如何找出實際類型?

(最初發佈於ask.libreoffice

+0

這些問題在LibreOffice開發人員郵件列表中最有可能是最好的問題。最有可能的唯一能回答這樣的問題並就如何實施一個好的uno橋樑提供建議的人是Stephan Bergmann,他是一名付費的LibreOffice開發人員。 – moggi

+0

@moggi我還沒有興趣實施一個uno橋;我有興趣使用[現有的自動化橋樑](https://wiki.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Bridge/Automation_Bridge);但非常感謝。 –

+0

即使在這種情況下,Stephan和郵件列表可能是最好的方法。例如。 com.sun.star.frame.Desktop是一種服務,而不是一種類型,但只有Stephan或可能Michael會知道爲什麼getType返回XInterface而不是其他接口之一的細節。 – moggi

回答

0

我相信你正在尋找的「執行名稱」,而不是「接口類型的名字。」

下面的代碼改編自XrayTool導致消息com.sun.star.comp.framework.Desktopcomp這裏可以perhaps be ignored)。

WScript.Echo(desktop.ImplementationName) 

也有一個很好的方法,但是隻適用於Basic。

obj = createUnoService("com.sun.star.frame.Desktop") 
MsgBox obj.DBG_Properties 

這將產生一條長消息,從Properties of object "com.sun.star.frame.Desktop"開始。

最後,不要忘了supportsService,儘管它可能不適合您的特定用例。在編寫宏時,首選的方法是檢查特定對象是否支持服務,而不是檢查對象實際是什麼類型。