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