2017-09-22 15 views
0

Lotus Notesクライアントによって提供されるCOMクラスにアクセスしようとしています。 Pythonでは、これはwin32com.clientのlibと非常に簡単でした:ゴーで今GolangのCOM経由でLotus Notesとのインタフェース

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 

、私は成功していません。以下は私のコードです

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

どの操作でパニックが発生しますか? – captncraig

+0

@captncraigよく、クラスをロードできないため、最初の 'panic(err)'でパニックが発生します。 – rhillhouse

+0

CreateObjectは特定のレジストリキーを介してClassIDを参照するユーティリティです。 [関連コード]のコメントを参照してください(https://github.com/go-ole/go-ole/blob/8a4f5c214bfb4475619b8bb7ccbe6fa5c91745f4/com.go#L105)私はそれが登録されていないと思います。わずかに異なるもの。 – captncraig

答えて

0

Goが64ビット環境で実行され、PowershellとPythonが32ビット環境で実行されている場合、またはその逆の場合は問題です。 Lotus COMクラスはunsupported in 64 bit environmentsです。正しく登録されていれば(ほとんどの場合)動作させることができますが、いくつかの呼び出しは失敗します。メモリが正しく機能していれば、設計要素のコレクションを返すすべてのメソッドが失敗し、いくつかの方法があるかもしれません。

+0

私はそれらが32ビットであることを認識しています。私がpowershellを使うときは、単純にx86版を使いますが、Pythonではそのようなことはしませんでした。私はGo 32bitアーキテクチャーでプログラムを苦労しましたが、それはまだ動作しません。 – rhillhouse

関連する問題