代码之家  ›  专栏  ›  技术社区  ›  Alex

是否有可能从C++应用程序调用C语言应用程序?

  •  0
  • Alex  · 技术社区  · 15 年前

    我是一名编程专业的学生,现在我已经在C语言上有了两门课,这学期我正在学习我的第一个C++课程。

    出于好奇,有可能调用C++应用程序中的C语言应用程序吗?

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

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

    仅供参考,我想做的是:

    • 检查计算机上是否安装了.NET Framework
    • 如果不是,请询问用户是否愿意安装,如果愿意,请继续下载并安装框架。
    • 调用我用C语言编写的程序,然后杀死C++程序
    3 回复  |  直到 14 年前
        1
  •  1
  •   Reed Copsey    15 年前

    出于好奇,有可能调用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
  •  3
  •   SLaks    15 年前

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

    可以使用COM互操作公开类,或者可以使用C++/CLI创建一个“桥接器”。

    您可以在“原始”C++(没有COM)中执行它。 exporting methods from the C# DLL .

    但是,在您的情况下,您也可以使用 CreateProcess .

        3
  •  0
  •   John Knoeller    15 年前

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

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

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

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