.NET与C ++ .NET之间的主要区别是什么?

时间:2012-01-03 10:07:12

标签: c++ visual-c++

  

可能重复:
  What is the difference between Managed C++ and C++/CLI?
  What is CLI/C++ exactly? How does it differ to 'normal' c++?

我对区分C ++和C ++ .NET感到怀疑。

这是正确的C ++是非托管代码而C ++ .NET是托管代码吗?

我需要用C ++编写项目。为了更好地构建GUI,我更喜欢使用C ++ .NET。

我还有另一个普通的C ++库(非托管C ++ DLL文件),是否可以将它用作C ++ .NET项目中的普通DLL库?

4 个答案:

答案 0 :(得分:34)

  

这是正确的C ++是非托管代码,C ++ .NET是托管代码。

没有" C ++。NET"。有C ++ / CLI,它基本上是带有Microsoft扩展的C ++,允许您编写面向.NET框架的代码。 C ++ / CLI代码编译为CLR字节码,并像C#一样在虚拟机上运行。我假设您实际上在谈论C ++ / CLI。

关于这一点,可以说标准C ++是非托管的,而C ++ / CLI是托管的,但这是微软的术语。你永远不会看到这个术语" unmanaged"在谈论标准C ++时使用这种方式,除非与C ++ / CLI相比。

标准C ++和C ++ / CLI都可以由同一个Visual C ++编译器编译。前者是VC ++编译器的默认设置,而需要编译器开关才能在后一种模式下进行编译。

  

我需要用C ++编写项目。为了更好地构建GUI,我   我更喜欢使用C ++ .NET。

您可以使用C ++和C ++ / CLI构建GUI程序。它更加困难,因为标准C ++中没有像.NET框架那样构建GUI的标准库,但是有许多项目,如QtwxWidgets提供C ++ GUI框架。

  

我还有另一个普通的C ++库(非托管C ++ DLL),它会是什么   可以在C ++ .NET项目中将它用作普通的dll库吗?

是。处理不同的标准C ++数据类型和.NET数据类型可能需要一些额外的工作,但你当然可以使它工作。

答案 1 :(得分:11)

托管C ++是一种现在已弃用 Microsoft与C ++的偏差,包括语法和语法扩展,关键字和属性,用于将C ++语法和语言引入.NET Framework。这些扩展允许C ++代码以托管代码的形式定位到公共语言运行时(CLR),并继续与本机代码进行互操作。托管C ++不是一个完整的独立或完整的编程语言。

托管C ++

#using <mscorlib.dll>
using namespace System;

int main()  {
  Console::WriteLine("Hello, world!");
  return 0;
}

Vanilla C ++

#include <iostream>
using namespace std;

int main()
{
  cout << "Hello, world!";
 return 0;
}

答案 2 :(得分:6)

嗯...... C ++ .NET有点用词不当。 您可以使用visual studio .NET在C ++中编程。那就是它之前被称为它的东西。现在有几天人们称它为Visual Studio,带有点NET名字。好吧,至少闪屏不再是徽标中的大型.NET了。

可以理解,使用Visual Studio(VS),您可以使用托管和非托管语言进行编程(btw有很多选择)。

如果您想使用Visual Studio在C ++中编程,您有两种选择:

  1. 非托管或本机C / C ++。这是旧的(或者我也是新的)C ++ 您一直都知道,并使用非托管内存进行编程。

  2. 托管C ++。他们称之为C ++ / CLI。这是通过CLI读取C ++,而不是 C ++除以CLI!这是C ++,它有额外的关键字,还有一些 额外的语法元素比本机C ++。这允许你 利用.NET基础类库并做其他有趣的事情 .NET框架。这当然使用垃圾收集器 托管类型的内存。

  3. 就我个人而言,我最喜欢的语言是C#,但如果你需要在C ++和.NET之间进行互操作而不是使用Managed C ++。这很容易做到,我认为比其他P / Invoke更容易。

    如果您要参加某个项目,我建议您使用C#进行用户界面,并充分利用它提供的所有功能。然后让该引用包含包含C ++代码的混合模式托管库。我认为这对你来说会容易得多。

    您上一个问题的答案是肯定的,您肯定可以在您的应用中使用它。

    以下是依赖关系的工作方式:

    [C#App / GUI]依赖于[托管C ++程序集]取决于[Native C ++ Lib]

答案 3 :(得分:3)

  • 是的,C ++是非托管代码,管理C ++ / CLI。
  • 是的,您可以在C ++ / CLI项目中使用非托管C ++ DLL。但你必须为此编写一个包装器。这意味着您必须在C ++ / CLI项目中定义要访问的非托管方法。

示例:

using System.Runtime.InteropServices;

[DllImport("YourDLLName")]
public static extern void UnmanagedMethodName(string parameter1);