参考COM + dll

时间:2018-10-04 08:43:59

标签: c# visual-studio com

对于我的工作,我需要将32位c ++ dll与64位c#程序一起使用。我想尝试使用dll作为包装器来执行此操作。

我现在所做的是我制作了一个dll,该dll使用dll导入来公开c ++ dll的功能,然后启用COM +以使这些功能以64位可用。

我面临的问题是使用此COM + dll。为此,我遵循了this documentation

我用一个强名签名,编译,使用gacutil注册它,然后将其发送给Regsvcs到com +。但是,当我要使用它时,我需要在我的64位应用程序中对其进行参考。

我试图添加引用,选择COM,然后选择我的班级,它告诉我:

  

ActiveX类型库是从.net程序集导出的,无法注册。

如果我尝试添加tlb文件,它会告诉我:

  

检查文件是否可访问,这是程序集还是有效的COM组件

如果我将dll作为参考,则会收到badImageException。 我的计算机不是英语,因此消息可能不正确。

1 个答案:

答案 0 :(得分:0)

您不能在64位进程中加载​​32位DLL(反之亦然)。仅当COM服务器不在进程内(即可执行文件)时,将其包装在COM上才有帮助。据我从您的描述中了解,如果它是一个进程内COM服务器(即DLL),那将无法正常工作。您的64位进程将加载64位COM服务器,然后这将尝试加载32位DLL,这将失败。您需要做的是将COM包装器更改为进程外服务器。这将在其自己的32位进程中运行。通过COM透明地完成32位和64位进程之间的数据封送处理。