Ich versuche, auf die COM-Klassen zuzugreifen, die von dem Lotus Notes-Client bereitgestellt werden. In Python hat dies mit win32com.client
lib ganz einfach:Schnittstelle mit Lotus Notes über COM in Golang
def initialize_notes(self):
"""
Initializes an object from the class.
:return: Lotus Notes database
"""
notes_session = win32com.client.Dispatch('Lotus.NotesSession')
notes_session.Initialize(self.notes_password)
notes_database = notes_session.GetDatabase(self.domino_server, self.domino_db)
return notes_database
Jetzt in Go, ich habe nicht erfolgreich gewesen. Unten ist mein Code:
import (
"github.com/go-ole/go-ole"
"github.com/go-ole/go-ole/oleutil"
)
func Connect(dominoServer, database, notesPassword string) (*ole.IDispatch, error) {
ole.CoInitialize(0)
unknown, err := oleutil.CreateObject("Lotus.NotesSession")
if err != nil {
panic(err)
}
notes, err := unknown.QueryInterface(ole.IID_IDispatch)
if err != nil {
panic(err)
}
session := oleutil.MustCallMethod(notes, "Initialize", notesPassword).ToIDispatch()
db := oleutil.MustCallMethod(session, "GetDatabase", dominoServer, database).ToIDispatch()
return db, nil
}
Welche panic: Class not registered
mit dem folgenden Fehler in Panik gerät. Die Klasse ist jedoch registriert, da sowohl die Powershell- als auch die Python-Version der Funktion problemlos darauf zugreifen kann.
Was mache ich falsch?
Welcher Vorgang verursacht die Panik? – captncraig
@captncraig gut, ich verursache die Panik beim ersten 'panic (err)', weil ich die Klasse – rhillhouse
nicht laden kann CreateObject ist ein Dienstprogramm, das die ClassID über bestimmte Registrierungsschlüssel nachschlägt. Siehe Kommentar in [der entsprechende Code] (https://github.com/go-ole/go-ole/blob/8a4f5c214bfb4475619b8bb7ccbe6fa5c91745f4/com.go#L105) Ich vermute, es ist nicht registriert, und die Python-Lib tut etwas anderes. – captncraig