我有一个第三方COM对象(32位),我需要从我的C#应用程序(64位)调用。 我知道我必须在单独的进程中运行COM对象。 这个COM对象有许多实现的类,所以我试图避免编写我自己的公开所有方法的远程包装器。 COM +似乎是最直接的解决方案。我打开组件服务菜单,创建一个新的COM +应用程序,将我的COM对象作为组件添加到此应用程序中。一切都似乎进口美丽。调用32位COM从C#运行在64位模式
以我C#应用程序,我添加原COM对象为基准(自动生成类型库)。使用类型库引用,我可以从COM +组件创建对象(我看到它们开始在组件服务窗口中旋转),但是当我尝试访问对象的方法时,出现错误,说明接口未注册。
有没有人有线索?我回去并在COM对象上运行了regsvr32,但我认为这不是必要的,也没有帮助。 我在C#中的用法是否正确?看到这些方法,VS2008自动完成没有任何问题。
确切的例外是: “接口未注册(从HRESULT异常:0x80040155)”
不清楚究竟有哪些权限和角色有关的组件服务,我尝试了COM +对象标识设置到在系统帐户下运行,作为本地服务和交互式用户。我已将角色添加为角色中的用户。 一切都在本地运行,所以不应该有文件权限或类似的问题。
我也想重申,此COM对象包含很多类。我成功地在客户端实例化了一个类对象并设置了一些属性值。 我还成功实例化另一个类的对象,但收到试图调用这个第二对象的方法时,此异常....所以我不认为有是哪一本登记册我的COM对象在注册的问题。
COM +非常依赖于权限等。也许这是怎么回事...... – Yahia
Windows有效地拥有两个不同的注册表,一个用于32位,一个用于64位。我相信这个接口是在一个接口中注册的,然后在另一个接口中进行注册。 – GSerg
GSerg是正确的。如果注册它的应用程序是32位,在64位系统上运行,则所有注册表项都会在镜像的WOW6432节点中结束,而不是在通常的情况下运行。 –