繁体   English   中英

.NET中的非托管C ++

[英]Unmanaged C++ in .net

有人可以告诉我为什么,创建C#语言的伟大的Microsoft,现在我们在C#4.0中,没有C ++ \\ CLI具有的重要功能!!,它可以直接编译并与非托管c ++链接?

C#是另一种语言。 它不必包含任何其他语言的所有功能即可对其用户社区有用。 特别是,C#4.0的重点是通过吸收动态(脚本)语言的功能,而朝着与C ++完全相反的方向发展。 同样,在C#与C / C ++共享功能(例如指针)的情况下,它们以特殊的“不安全”模式进行隔离,以指示它们通常是不受欢迎的。

此外,由于.NET是一个多语言平台,因此不必每种语言都包括每种其他语言的所有功能以使其互操作。 无论如何,他们可以很容易地互相打电话。

请注意,C ++和C#在许多关键字和运算符的含义上根本不同。 例如:

class C { }

(不考虑它后面是否应该有一个半冒号(可选地,以逗号分隔的变量声明列表开头),要统一起来将很棘手。)

C应该是可以分配非托管内存并传递给其他本机代码而不必固定在GC中的本机C ++类吗? 还是应该将.NET类传递给其他.NET库?

或如何:

C c;

那应该声明对C的引用还是创建C的实例?

或如何:

new C()

应该在本机C ++堆还是在GC .NET堆上分配?

在C ++ / CLI中,所有这些问题都必须解决。 通过从以前版本中发生的混乱中吸取教训,Microsoft通过使用gcnew而不是new这样的不同关键字,清楚地将C ++ / CLI中的两个世界分开了。

如果您试图允许C#像现在这样编译C ++,则必须重命名许多已经对C#至关重要的操作,从而破坏了与所有现有C#程序的兼容性。

重点是什么?

因为C#是一种托管语言,并且打算用于编写托管代码,并且C ++ / CLI已经存在,可以弥补需要直接链接非托管C / C ++代码的人们的鸿沟?

我不确定为什么您会想要除DllImport / PInvoke之外的更多本机互连支持。 如此一来,您将只需要很小的语法差异就可以重新创建C ++ / CLI。

您可以使用PInvoke调用C ++代码,即使是的,它也不一样。

因为托管代码和非托管代码保持分开。 托管代码在CLR中执行,而非托管代码则不会。 您可以使用P / Invoke链接托管代码和非托管代码。

实质上,这是为了帮助您封送往返于托管世界的信息。

您可以从托管代码调用非托管C ++,也可以从非托管C ++调用托管代码。 请参阅PInvokeC ++ / CLI

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM