繁体   English   中英

从64位模式运行的c#调用32位COM

[英]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所说。 我们通过这样做得到它:

  • 安装VFP oledb 9驱动程序(不知道你有什么可能不需要)。
  • 给网络服务IIS_IUSR完全控制COM文件夹(需要这样DLL,当从网站调用时,可以在自己的文件夹中进行一些日志记录)。
  • 运行regsvr32.exe“c:\\ xxx \\ yourfile.dll” - >这应该会成功!
  • 创建COM +应用程序,并添加DLL作为一部分
  • 在具有足够权限的用户上设置应用程序COM +凭据

我们不得不对应用程序池/ IIS中的权限进行更多设置,但我猜这不是必需的。

无论如何,只要确保你有足够的日志记录,确保dll已注册,之后它的所有权利权利..

祝你好运!

很抱歉使用“答案”回复评论,但这似乎是我唯一的途径。

迁移到64位操作系统的全部目的是获得额外的可寻址内存空间,因此无法以32位模式运行整个应用程序。

可能与以下问题有关:在成功创建三个类对象之后,我能够在一个中设置属性,在第二个中调用一个没有参数的方法,但是它在第三个中调用了一个方法,它接受了另外两个对象作为抛出异常的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM