是否可以从C ++应用程序调用C#应用程序?
我是一名编程学生,我现在有两个C#课程,这个学期我正在学习我的第一个C ++课程。
出于好奇,是否可以从C ++应用程序调用C#应用程序?
如果是这样,是否也可以检查运行该程序的计算机是否具有.NET框架?
我只是好奇,我认为如果可能的话,这将是一个很好的小程序,可以编写并作为未来的工具。
仅供参考,以下是我想做的事情:
- 检查计算机上是否安装了.NET框架
- 如果不是,请询问用户是否要安装它,如果愿意,请继续下载并安装框架
- 调用我用C#编写的程序然后终止C ++程序
出于好奇,是否可以从C ++应用程序调用C#应用程序?
是。 这里有一些选择。 如果使用C ++ / CLI,则可以直接在C ++中使用C#中定义的类型。 否则,一种典型的方法是使用COM,将C#类型作为COM对象。
如果是这样,是否也可以检查运行该程序的计算机是否具有.NET框架?
是。 在这里,通常,您只需将框架与应用程序一起安装即可。 这是一个页面, 显示了一些用于检查安装了哪个版本的.NET(如果有)的选项 。
有很多方法可以从C#调用.Net代码。
您可以使用COM Interop公开类,也可以使用C ++ / CLI创建“桥”。
您可以通过从C#DLL导出方法在“原始”C ++(无COM)中执行此操作 。
但是,在您的情况下,您可以使用CreateProcess
简单地启动C#EXE文件。
AC#(实际上是.NET)应用程序实际上是一个非托管的存根exe,可以加载.NET环境,然后跳转到C#代码。
换句话说,C#app始终包含在非托管进程中。 因此,如果您愿意将自己限制为使用C#DLL而不是C#应用程序,则可以在自己的C ++进程中托管它们。
- 检查计算机上是否安装了.NET框架
- 如果不是,请询问用户是否要安装它,如果愿意,请继续下载并安装框架
- 初始化.NET运行时,将我的C#库加载到其中并跳转到C#代码。
- 利润
请注意,这里的区别在于您永远不会关闭C ++进程,它会成为C#代码的主机 – 这基本上是Windows在运行C#应用程序时所做的事情。