繁体   English   中英

从C#调用托管C#COM对象

[英]Calling Managed C# COM Objects from C#

我正在尝试从C#调用C#COM对象。 我在C#中创建了一个类库,并使用tlbexe.exe导出了类型库。 然后,我使用regtlibv12.exe注册了类型库。 但是,当我在Visual Studio中添加对COM对象的引用时,出现一条错误消息:

“ Active X类型库...是从.NET程序集导出的,不能添加为引用。而是添加对.NET程序集的引用。”

任何帮助将不胜感激。

64位进程无法直接访问32位取消管理代码。 在64位系统上,COM对象有2个域。 一种用于64位进程,另一种用于32位进程。 它们在注册表中具有不同的注册区域,因此,如果仅对32位Com对象进行注册,就不存在64位进程。 现在,如果您有一个以ANY_CPU为目标的程序集,则CLR可以将其加载到64位或32位进程中。 但是,如果将ANY_CPU程序集加载到64位进程中,则仍然无法加载任何32位未完成的代码。 在所提及般溶液ARTICAL使用DCOM和IPC创建出处理呼叫的从64位到32位的代码。

使用WCF,您可以在.Net中轻松完成同一操作。 您创建的32位WCF服务器进程访问您的32位托管代码。 您的64位进程是WCF客户端,并调用32位服务器。 您可以使用WCF支持的“命名管道”属性来避免网络堆栈。

上面的评论中提到的文章适用于非托管(或本机)代码。 如果您将主机应用程序编译为AnyCPU,则这不是.NET中的问题(我不确定在x86计算机上使用x64程序集可能会出现问题)。 您可以忽略32位DLL中的COM互操作内容(假设您不需要其他任何东西),而仅从64位程序集中引用它即可(只需确保将目标体系结构更改为AnyCPU)。

暂无
暂无

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

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