我们如何在Visual Basic 6中导入LibreOffice Writer的侦听器事件

时间:2017-10-31 14:25:35

标签: vb6 libreoffice libreoffice-basic

我们如何在Visual Basic 6中导入LibreOffice writer的侦听器事件?

我正在尝试创建一个UNO服务来获取容器侦听器事件,如下面的代码,

Dim oListener As Object
oListener = CreateUnoListener("ContListener_", 
    "com.sun.star.container.XContainerListener")

我收到错误

  

编译错误:Sub或Function未定义

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

正如here所述,CreateUnoListener在VB6中不起作用。因此,有必要以不同的方式实现侦听器接口。

以下是来自https://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Document_Events的VBScript示例。

set xContext = objServiceManager.getPropertyValue( "DefaultContext" )
set xCoreReflection = xContext.getValueByName( "/singletons/com.sun.star.reflection.theCoreReflection" )
set xClass = xCoreReflection.forName( "com.sun.star.document.XEventBroadcaster" )
set xMethod = xClass.getMethod( "addEventListener" )

dim invokeargs(0)
invokeargs(0) = myListener

set value = objServiceManager.Bridge_GetValueObject()
call value.InitInOutParam("[]any", invokeargs)
call xMethod.invoke( objDocument, value )

定义一个名为myListener的子程序。

也可以查看https://www.openoffice.org/udk/common/man/tutorial/office_automation.html上的信息。

虽然最终解决方案使用Javascript,但有人在https://forum.openoffice.org/en/forum/viewtopic.php?f=45&t=14217尝试使用类似代码的讨论。

免责声明:我没有办法测试VB6代码,因此这些信息可能不完全准确。如果您切换到Python或LibreOffice常用的其他语言,那么我可以提供更多帮助。