【问题标题】:What technologies can be used to call from a native process to a C# process?可以使用哪些技术从本机进程调用到 C# 进程?
【发布时间】:2010-10-29 03:50:59
【问题描述】:

我在同一系统上有一个本机 (C++) 进程和一个托管 (C#) 进程。我想启用两者之间的通信,类似于在两个本机进程之间使用 RPC 的方式。我知道我可以在本机进程中使用 Microsoft 的 WWSAPI 来使用 WCF。但我想知道我还有哪些其他选择?还是 WCF 是最好/唯一的解决方案?

【问题讨论】:

  • 看看 rerun 和 Jim 的答案,我应该澄清一下 - 我正在寻找 C# 应用程序中的 C++ 应用程序调用函数。

标签: c# c++ wcf interop


【解决方案1】:

如果你想在两个进程之间进行通信,你有很多选择,正如 rerun 在他的回答中所说的那样。在他的列表中,您可以添加共享内存(内存映射文件)和命名同步对象,如信号量和事件。我确定还有其他人。

如果您希望 C++ 应用程序调用 C# 应用程序中的函数,则您的选择会受到更多限制。 WCF 不是唯一的解决方案,甚至可能不是首选的解决方案。您可以将 C# 公开为 COM 接口。这是一种方法。 http://support.microsoft.com/kb/828736

【讨论】:

    【解决方案2】:

    看看Apache Thrift

    Thrift 是一个软件框架 可扩展的跨语言服务 发展。它结合了一个软件 堆栈与代码生成引擎 构建高效工作的服务 并在 C++、Java、 Python、PHP、Ruby、Erlang、Perl、 Haskell、C#、Cocoa、Smalltalk 和 OCaml。

    最初在 Facebook 开发, Thrift 于 2007 年 4 月开源 并进入 Apache 孵化器 2008 年 5 月。

    【讨论】:

    • 我喜欢大家回避这个问题的方式。您了解 WCF,但想了解其他选项。嗯..叮!叮!
    【解决方案3】:

    仅举几例。基于文件、TCP/IP、管道、命名管道、邮件丢失、MQ、windows 消息,

    【讨论】:

      【解决方案4】:

      如果 C++ 程序“负责”,那么 @Jim 提到的 COM Interop 可能是您唯一的选择。如果它更多是两种方式,您还可以执行“反向 PInvoke”(不是官方名称),其中 C# 代码将委托转换为函数指针,并在 C++ 代码中 PInvoke (平面 C 风格)函数,传递在函数指针中,然后 C++ 代码使用函数指针来运行位于委托末尾的任何 C# 方法。虽然这需要更多的管道,但它可以让您享受 COM Interop 的性能。或者,如果您真的很勇敢,您可以编写一个托管的 C++/CLI 类,以通常的方式调用您的 C# 代码,并在 gcroot 模板的帮助下,从您的本机 C++ 代码中调用它。

      http://www.gregcons.com/KateBlog/CallingManagedCodeFromNativeCode.aspx 有一个指向第三种方式的博客条目的链接。 http://www.gregcons.com/KateBlog/IntroToCOMInterop.aspx,已经快 4 年了,有一个 MSDN 文章的链接,它稍微扩展了前两个选项。

      PS:Web 服务作为一种在同一台机器上由同一开发人员编写的两个程序之间进行通信的方式几乎从来都不是正确的答案。并不是说它不起作用,但如果你控制两端,有更快更简单的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-19
        • 2010-09-27
        • 2022-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-16
        • 1970-01-01
        相关资源
        最近更新 更多