【问题标题】:Using COM for RPC from C++ to C#使用 COM 进行从 C++ 到 C# 的 RPC
【发布时间】:2011-10-19 12:21:56
【问题描述】:

我需要在 C++ 中实现一个类,该类可以从非托管 C++ 调用 C# 函数并返回一个值。我已经通过命名管道使用 MIDL/RPC 绑定从 C++ 到 C++ 完成了这项工作,效果很好,但现在我的服务器应用程序正在迁移到 C#,但客户端必须保持非托管 C++(它是一个资源管理器扩展)。

我查看了各种方法,很多人建议使用 COM,据我了解,COM 不是用于 IPC/RPC,而是用于在客户端应用程序中托管服务对象。 COM 是否可以做到这一点,如果可以,有人可以指出我的良好参考或示例的方向吗?

编辑:

为了清楚起见,我不能使用托管代码,因为客户端 (DLL) 已加载到资源管理器的进程空间中。

我想要实现的是,当用户右键单击文件时,扩展程序会询问正在运行的服务(会话 0)以获取有关该文件的一些详细信息。这以前是通过 C++ C++ 客户端/服务器中的 RPC 完成的。现在服务器已升级到 C#,但我不确定我的选择是什么。 COM 是一种选择吗?

谢谢, J

【问题讨论】:

  • COM 在必要时使用 RPC,在进程外或跨单元的情况下。不必与 RPC 争吵当然非常好。您的问题中没有足够的细节来判断这是否适用。
  • 已编辑以包含更多细节。

标签: c# c++ winapi com rpc


【解决方案1】:

使用混合的 CLR 和本机 C++ DLL。检查MSDNtools

Native and .NET Interoperability

【讨论】:

  • 我无法在我的扩展中使用 CLR,因为它已加载到资源管理器进程空间中。 blogs.msdn.com/b/junfeng/archive/2005/11/18/494572.aspx
  • @JWood:你想从 .net 中使用什么?自己的模块?
  • 当用户在资源管理器中右键单击时,我需要调用正在运行的 C# 服务中的函数来检索有关文件的信息。 WCF 通过命名管道很好地实现了这一点,但非托管 C++ 如何在正在运行的 C# 服务中调用函数?
  • @JWood:对于 IPC,我通常使用 TCP/IP 和 XML。它们是面向未来且独立于系统的。
  • 它不需要独立于系统,这仅适用于 Windows,并且将 TPC/IP 和 XML 库构建到 Explorer 扩展中涉及大量开销。这将是我最后的手段,但由于经常建议使用 COM,我想探索这种可能性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 2011-10-15
  • 2013-04-29
  • 1970-01-01
  • 2010-11-20
相关资源
最近更新 更多