2010-01-28 73 views
0

我是一名编程学生,现在我已经在C#中有两个类,本学期我正在学习第一个C++类。是否可以从C++应用程序调用C#应用程序?

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

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

我只是好奇,我想如果可能的话,这将是一个伟大的小程序来编写和作为未来的工具。

只是为了您的信息,这里有我想要做什么:

  • 检查,以查看是否在计算机上安装.NET框架
  • 如果不是,询问用户是否愿意安装它,如果他们会,请下载并安装框架
  • 叫我的程序用C#编写,然后杀了C++程序
+2

由于这里存在多个与半无关的问题,所以最好单独提出问题...... – 2010-01-28 01:40:04

+2

在*执行*中调用或在*进程间通信中调用*? – 2010-01-28 01:40:15

回答

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

3

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

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

你可以通过exporting methods from the C# DLL在“raw”C++(没有COM)的情况下做到这一点。

然而,就你而言,你可能只需使用CreateProcess启动C#EXE文件。

0

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

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

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

注意这里的区别是,你永远不关机的C++程序,它就会成为你的C#代码的主机 - 这基本上是当你运行一个C#应用程序什么Windows不反正。

相关问题