C++ CLR win32 还是其他?

Posted

技术标签:

【中文标题】C++ CLR win32 还是其他?【英文标题】:C++ CLR win32 or others? 【发布时间】:2011-08-15 03:40:28 【问题描述】:

我正在使用 C++,发现有不同种类的 C++,例如 CLR、Win32、MFC....

此外,我发现一些 C++ 库 cab 在其他一些 C# 程序中被调用。怎么可能?

既然认为 C++ 比 C# 快,因为它不需要平台来运行它,但是如果在 CLR 中使用 C++,它会因为需要 .Net 框架而变得更慢吗?

问题是: 我想制作一个调用 windows 命令并返回输出的 C++ 库,这个库可以在其他 C# 程序中调用。有可能这样做吗?如果是,C++ 库是否需要 .Net 框架并运行更慢?

【问题讨论】:

【参考方案1】:

你的困惑是可以理解的,但你的理解是有缺陷的。

C++ 和使用 MFC 没有区别,MFC 是一个用 C++ 编写的类框架,就像您可能用 C++ 编写的任何其他代码一样。这只是 Microsoft 为其产品提供的一个框架。

C++/CLI(不是 CLR)并不是真正的 C++。它是一种类似 C++ 的语言,可编译为 .net IL 字节码。它有很多限制,并且具有与 C# 和 VB.NET 以及其他 .NET 语言相同的限制。它与 C++ 非常相似,但又不完全相同。

C++/CLI 应用程序编译为 .net IL 字节码,因此它们与 C# 应用程序没有什么不同。事实上,几乎所有基于 .net 的语言都会编译成相同的字节码,并使用相同的框架。

C# 或 C++/CLI 程序是否“较慢”并不是那么明确。太多的 C++ ***者延续了托管代码速度慢的神话。它不是。有些事情很慢,比如第一次运行它(它必须按需编译代码),但是因为 .NET Jitter(即时编译器)可以针对它运行的平台优化代码,所以它来了 make the code表现更好。

当然托管代码也有垃圾回收,这很方便,但在某些情况下可能会导致性能问题。但是,这不是所有情况,甚至不是大多数情况。

【讨论】:

好答案。是的,我总是把 CLR 和 CLI 弄糊涂:) 但是当我打开一个新项目时,visual studio中的选项显示名称“CLR Empty Project”和“CLR Console Application” @user883434 - 还有?我不确定你的意思是什么。不同的项目只是为您提供起点的模板,它们不是不同种类的 C++。 @user883434 要创建本地 C++ 项目,请转到左侧的“其他语言”部分并选择“Win32”项目。 @mystere-man 只是一件事,使用 c++ cli 调用本机代码比使用 c# (introp) 更容易【参考方案2】:

是的,有可能。

如果您使用 C++/CLI,您只需将程序集包含在您的 C# 项目中,然后像普通 C# 代码一样调用函数。如果您使用非 CLI C++ 编写它(Win32 和 MFC 不是 C++ 的种类,它们只是库......)那么您将不得不使用 C# 中的 P/Invoke 来调用用 C++ 编写的函数。

是的,C++/CLI 在某些方面可能比普通 C++ 慢一点。但不是很多。 CLR 相当快。

【讨论】:

以上是关于C++ CLR win32 还是其他?的主要内容,如果未能解决你的问题,请参考以下文章

ATL CLR MFC Win32 常规 的区别

无法在 VS 2013 社区中创建 C++ 项目

VC学习笔记---ATL MFC CLR三个库的区别

无法使用 /clr 选项从 Visual C++ 项目加载 CLR

如何创建一个 Win32 控件来包含其他 Win32 控件?

C++ Win32 监听全局键绑定