Du kannst (ggf.: 'Du kannst üblicherweise') Code aus verschlüsselten Bibliotheken nicht direkt aufrufen sondern nur mittels eines Makro (evt. einer Funktion) aus einer unverschlüsselten Bibliothek heraus. Üblicherweise ist das die Bibliothek "Standard", ich nehme aber an es wird mit beliebigen anderen Bibliotheken auch funktionieren.
Wenn sich Code aus verschlüsselten Bibliotheken dann trotzdem nicht ausführen lässt, dann deshalb weil diese nicht geladen waren, Du solltest im Falle verschlüsselter Bibliotheken diese also immer laden bevor Du versuchst Code daraus auszuführen (mittels .LoadLibrary, siehe OOo-Hilfe).
Da ich das routinemäßig immer tue (und ggf. auch weil ich Deinen Code nicht kenne), kann ich Dir nicht sagen ob das hier:
Das komische ist ja, dass 3 Makros in einer geschützen Bibliothek laufen, eins nicht.
im Speziellen besondere Ursachen hat, das Übliche wäre das Verhalten das notwendigerweise zu ladende Bibliotheken, wenn sie nicht geladen sind, beim ersten Aufruf einen Fehler erzeugen, gleichzeitig im Hintergrund geladen werden und bei weiteren Zugriffen nun keinen Fehler mehr erzeugen weil sie ja inzwischen geladen sind.
was macht es für einen Sinn, dass ich auf geschützten Makrocode nicht
mehr zugreifen kann?????
Na den den Code gerade davor (Zugriff) schützen zu wollen, warum sollte man ihn sonst verschlüsseln.
Vielleicht liegt das Mißverständnis auch in der Ungenauigkeit des Begriffes "Zugriff", dann übersetze den mit "Einblicknahme in den Quellcode erlangen", denn das ist es worum es im Kern geht.(*) OOo hingegen braucht den Quellcode nur um ihn in Maschinencode zu übersetzen, denn nur der (und nicht der Quellcode) wird ausgeführt.
Ob beim Verschlüsseln der Bibliotheken nun intern der Quellcode verschlüsselt wird oder bereits Maschinencode verschlüsselt wird, kann ich Dir nicht sagen (vermuten würde ich, wegen der Multiplattformfähigkeit, das tatsächlich der Quellcode verschlüsselt wird).
(*)
Du kannst das gerne selbst ausprobieren, beispielsweise ausgehend von einem Dokument welches die ungeschütze Bibliothek namens Standard enthält, welche in Module1 folgenden Code beinhaltet:
Code: Alles auswählen
Sub Test()
bibliotheken = ThisComponent.BasicLibraries
If bibliotheken.hasElements() Then
namen = bibliotheken.getElementNames()
For i = 0 to UBound(namen())
akt = bibliotheken.getByName(namen(i))
if akt.hasElements() then
if not BasicLibraries.isLibraryLoaded(namen(i)) then
if Not BasicLibraries.isLibraryPasswordProtected(namen(i)) then
BasicLibraries.Loadlibrary(namen(i))
end if
end if
akt_mod = akt.ElementNames()
for j = 0 to UBound(akt_mod())
Msgbox akt.getByName(akt_mod(j))
Next j
end if
next i
end if
End Sub
Sub geschuetztes_makro_ausfuehren()
BasicLibraries.LoadLibrary("Library1")
Main()
End Sub
und eine geschützte Bibliothek namens "Lbrary1" mit Module1:
Code: Alles auswählen
Sub Main
Msgbox "Ich bin ein Makro in einer geschützten Bibliothek"
End Sub
achte darauf das Library1 mit Passwort geschützt ist, speichere das Dokument und lade das Dokument neu.
*Überzeuge Dich das Du Library1 nicht einsehen kannst (verzichte jedoch zunächst auf die Passworteingabe)
*starte Makro Test() und Du siehst den Code der ungeschützten Bibliothek, jedoch nicht den der geschützten
*starte Makro geschuetztes_makro_ausfuehren() um Dich zu überzeugen das das geschützte Makro trotzdem ausgeführt werden kann
*gib das Passwort für Library1 ein um den Code einsehen zu können
*starte nochmals Test() um jetzt zu sehen das auch der Code der zweiten Bibliothek sichtbar ist
Was Du nun mittels Passworteingabe manuell gemacht hast wäre genausogut im Makro Test() möglich mittels .verifyLibraryPassword(Name, Pass), wobei:
Name = Name der Bibliothek
Pass = Passwort
im Konkreten stellt sich die Frage nach dem Sinn, denn da das Passwort nun im ungeschützten Code steht, ist es einsehbar, allerdings wäre ja das Makro Test() auch in die geschütze Bibliothek zu verlagern und dann aus der ungeschützten nur aufzurufen.
Gruß
Stephan