C++ Lotus Notes自动化:Notes.NotesSession不';您不能实现Domino::ISession吗?

C++ Lotus Notes自动化:Notes.NotesSession不';您不能实现Domino::ISession吗?,c++,com,lotus-notes,C++,Com,Lotus Notes,我正在尝试改进我的Lotus Notes客户端代码: 工作: #import "...\IBM\Lotus\Notes\notes32.tlb" no_dual_interfaces raw_native_types CComPtr<IDispatch> session_dispatch; if(FAILED(session_dispatch.CoCreateInstance(_T("Notes.NotesSession")))) ... NOTESSESSION *ses

我正在尝试改进我的Lotus Notes客户端代码:

工作:

#import "...\IBM\Lotus\Notes\notes32.tlb" no_dual_interfaces raw_native_types

CComPtr<IDispatch> session_dispatch;
if(FAILED(session_dispatch.CoCreateInstance(_T("Notes.NotesSession"))))
    ...
NOTESSESSION *session = static_cast<NOTESSESSION *>(*&session_dispatch);

但是,它返回
E\u NOINTERFACE
。由于其他人声称有类似的代码在工作,我想知道这里可能发生了什么,并谦虚地询问是否有其他人有工作代码来实例化会话对象并获取工作接口指针。

对于domobj.tlb,您应该使用“Domino.notession”而不是“Notes.notession”。

Hm,我的注册表中不存在该代码。表明COM库通常没有正确注册。是的,这很有效\o/接受您的回答,因为它使我走上了正确的轨道,尽管原始名称似乎是正确的。是的,在过去的一些Lotus Notes版本中存在注册问题。也有可能他们在过去也改变了名字。在我当前的开发环境中,使用Notes8.5.3,类名肯定是Domino.NotesSession——但我在C#中工作,有互操作层。我想这可能会改变名字。我刚刚查看了8.5.3版本的Domino Designer文档,它实际上说domobj.tlb中的COM类的名称应该是Lotus.NotesSession,Notes32.tlb中的OLE类的名称应该是Notes.NotesSession。好吧,它现在可以正常工作了,非常感谢!从这个程序生成一个合适的包将是一场噩梦,因为我可能应该在安装程序中修复组件注册。修复它您的安装程序可能不明智。一台机器上可以安装多个Notes/Domino,除了让用户确定要使用哪一个之外,没有其他方法,很多用户都不知道。如果你最终使用了错误版本的Notes,它可能会变成一个可怕的支持问题,所有东西“看起来都是对的”,但就是不起作用。我可能会建议只检测问题,并设置一个对话框,通知用户致电他们的帮助台,并让他们参考以下IBM技术说明:
#import "...\IBM\Lotus\Notes\domobj.tlb" raw_interfaces_only raw_native_types

CComPtr<Domino::ISession> notes;
if(FAILED(notes.CoCreateInstance(_T("Notes.NotesSession"))))
    ...