我有一个第三方COM对象(32位),我需要从我的c#应用程序(64位)调用。 我知道我必须在一个单独的进程中运行COM对象。 这个COM对象有很多类实现,所以我试图避免编写自己的远程包装器来公开所有的方法。 COM +似乎是最直接的解决方案。我打开了“组件服务”菜单,创建了一个新的COM +应用程序,将我的COM对象作为组件添加到此应用程序中。一切似乎都很美妙。
在我的C#应用程序中,我添加了原始COM对象作为引用(自动生成类型库)。使用类型库引用,我可以从COM +组件创建对象(我看到它们开始在组件服务窗口中旋转),但是当我尝试访问对象的方法时,我得到一个错误说接口没有注册。
有没有人有线索?我回去并在COM对象上运行了regsvr32,但我认为没有必要,并没有帮助。 我在C#中的用法是否正确? VS2008自动完成功能在查看这些方法时没有问题。
确切的例外是: “未注册接口(HRESULT异常:0x80040155)”
不清楚组件服务中的权限和角色究竟是什么,我尝试将COM +对象标识设置为在系统帐户下运行,既作为本地服务又作为交互式用户。我在角色中添加了Everyone作为用户。 一切都在本地运行,因此不应该存在文件权限或类似问题。
我还想重申这个COM对象包含很多类。我在客户端成功实例化了一个类对象并设置了一些属性值。 我也成功地实例化了另一个类对象,但在尝试调用第二个对象的方法时收到了这个异常....所以我不认为我的COM对象是哪个注册表存在问题在。注册。
答案 0 :(得分:2)
我们遇到了类似的情况,使用VFP的COM dll。
这一切都取决于权利和许可,就像Yahia所说的那样。 我们通过这样做得到了它:
我们不得不对应用程序池/ IIS中的权限进行更多设置,但我认为这不是必需的。
无论如何,只要确保你有足够的日志记录,确保dll已注册,之后关于权利权利......
祝你好运!答案 1 :(得分:1)
很抱歉使用“答案”回复评论,但这似乎是我唯一的途径。
迁移到64位操作系统的全部目的是获得额外的可寻址内存空间,因此无法以32位模式运行整个应用程序。
问题可能与成功创建三个类对象之后的问题有关,我能够在一个中设置属性,在第二个中调用一个没有参数的方法,但它在第三个中调用了一个方法,其他两个对象作为抛出异常的参数。