我正在尝试访问Lotus Notes客户端提供的COM类。在Python中,使用win32com.client
lib:
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
现在在Go,我没有成功。以下是我的代码:
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
}
出现以下错误panic: Class not registered
的恐慌。该类已注册,因为该函数的Powershell和Python版本都可以毫无问题地访问它。
我做错了什么?
答案 0 :(得分:0)
如果Go在64位环境中执行,并且Powershell和Python在32位环境中执行 - 反之亦然,这就是您的问题。请注意,Lotus COM类是unsupported in 64 bit environments。如果你正确地注册它们,它们可以(大多数情况下)工作,但是一些调用确实失败了。如果内存正确地为我服务,那么返回设计元素集合的所有方法都会失败,并且可能会有其他一些方法。