【问题标题】:Is it possible to make a call to a C# application from a C++ application?是否可以从 C++ 应用程序调用 C# 应用程序?
【发布时间】:2010-05-18 10:03:26
【问题描述】:

我是一名编程专业的学生,​​现在我已经上了两门 C# 课程,本学期我将参加我的第一门 C++ 课程。

出于好奇,是否可以从 C++ 应用程序调用 C# 应用程序?

如果是,是否也可以检查运行程序的计算机是否具有.NET框架?

我只是好奇,我认为如果可能的话,这将是一个很棒的小程序,可以编写并作为未来的工具。

仅供参考,以下是我想做的:

  • 检查计算机上是否安装了 .NET 框架
  • 如果不是,请询问用户是否愿意安装它,如果愿意,请继续下载并安装框架
  • 调用我用 C# 编写的程序,然后终止 C++ 程序

【问题讨论】:

  • 最好单独提出问题,因为这里有多个半不相关的问题......
  • 调用执行还是调用进程间通信

标签: c# .net c++


【解决方案1】:

有很多方法可以从 C# 调用 .Net 代码。

您可以使用 COM 互操作公开一个类,也可以使用 C++/CLI 建立一个“桥梁”。

您可以通过 exporting methods from the C# DLL 在“原始”C++(无 COM)中完成此操作。

但是,在您的情况下,您还不如简单地使用 CreateProcess 启动 C# EXE 文件。

【讨论】:

    【解决方案2】:

    出于好奇,是否可以从 C++ 应用程序调用 C# 应用程序?

    是的。这里有几个选项。如果使用 C++/CLI,则可以直接从 C++ 中使用 C# 中定义的类型。否则,一种典型的方法是使用 COM,将 C# 类型作为 COM 对象。

    如果是,是否也可以检查运行程序的计算机是否具有.NET框架?

    是的。在这里,通常,您只需将框架与您的应用程序一起安装。这是shows a few options for checking which version of .NET (if any) is installed的页面。

    【讨论】:

      【解决方案3】:

      C#(实际上是 .NET)应用程序实际上是一个非托管存根 exe,它加载 .NET 环境,然后跳转到 C# 代码。

      换句话说,C# 应用程序始终包含在非托管进程中。因此,如果您愿意限制自己使用 C# DLL 而不是 C# 应用程序,您可以将它们托管在 您自己的 C++ 进程。

      • 检查计算机上是否安装了 .NET 框架
      • 如果不是,请询问用户是否愿意安装它,如果愿意,请继续下载并安装框架
      • 初始化 .NET 运行时,将我的 C# 库加载到其中并跳转到 C# 代码。
      • 利润

      请注意这里的不同之处在于您永远不会关闭 C++ 进程,它会成为您的 C# 代码的宿主 - 这基本上是 Windows 在您运行 C# 应用程序时所做的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-01
        • 2018-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 2011-03-03
        相关资源
        最近更新 更多