是否可以从C ++应用程序调用C#应用程序?

时间:2010-01-28 01:38:05

标签: c# .net c++

我是一名编程学生,我现在有两个C#课程,这个学期我正在学习第一个C ++课程。

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

您可以使用COM Interop公开类,也可以使用C ++ / CLI创建“桥”。

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

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

答案 1 :(得分:1)

  

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

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

  

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

是。通常,您只需在应用程序中安装框架即可。这是shows a few options for checking which version of .NET (if any) is installed

页面

答案 2 :(得分:0)

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

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

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

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