Habe eine kleine Verständnisfrage:
Kontext: LO Calc 7.1.4.2 / Basic
Wenn ich einen RegEx-Service benötige, dann erzeuge ich mir den mit
CreateUnoService("com.sun.star.util.TextSearch")
… funktioniert.
Was entsprechend Andrew P. “Useful Macro Information” wohl eine Kurzform für
GetProcessServiceManager().createInstance("com.sun.star.util.TextSearch")
ist (habe ich jetzt aber nicht ausprobiert).
Wenn man aber einen Konstruktor mit Argumenten ausführen muss (z.B. für eine EnumerableMap
), dann geht das mit
GetProcessServiceManager().createInstanceWithArguments(..., ...)
und da kommt jetzt meine Frage bzw. mein Problem.
In dem folgenden Beispiel führt das createInstanceWithArguments()
zu der gezeigten Fehlermeldung.
sub test_Map_2
Dim oMap as Object
Dim oEnum as Object
Dim key as String
Dim val as VariantDim oManager as Object
oManager = GetProcessServiceManager()
oMap = oManager.createInstanceWithArguments(“com.sun.star.container.EnumerableMap”, Array(“string”, “any”))
’ BASIC runtime error.
’ An exception occurred
’ Type: com.sun.star.lang.IllegalArgumentException
’ Message: com.sun.star.uno.Type expected. /home/abuild/rpmbuild/BUILD/libreoffice-7.1.4.2/comphelper/source/container/enumerablemap.cxx:333.oMap.put(“key1”, 1)
end sub
In
habe ich die Lösung gefunden …
oMap = com.sun.star.container.EnumerableMap.create(“string”, “any”)
an Stelle von createInstanceWithArguments()
.
Woran erkenne ich bei einem Service (in der Doku, z.B. LibreOffice: EnumerableMap Service Reference), wie ich mir eine Instanz erzeugen muss/kann?
Ich ging davon aus, dass das createInstanceWithArguments() richtig gewesen wäre?!
Grüße
Markus