[英]What can be done in VC++ (native) that can't be done with VC#?
VC ++(本机)可以用VC#做什么?
从我所知道的唯一值得使用VC ++原生的东西就是当你需要自己管理内存而不是CLR垃圾收集器时,我还没有看到任何目的(但这是另一个问题稍后会问) 。
跨平台开发。 是单存在,和Java的有些更可预测有它的功能EXACTLY在更多平台上一样,你可以找到几乎任何平台上的C / C ++编译器在那里,在那里你不能用C#。
同时链接到第三方库,虽然我确信有一种方法可以在C#中利用它们,但是你可以在C ++中没有互操作(Marshaling等)的情况下利用它们。
编辑:最后一件事:可靠的内存管理。 是的,你可以使用dispose()
和try-finally
,但是没有什么比知道当它从堆栈弹出时知道内存消失了。 通过像RAII这样的技术,当您使用构造良好的类时,您将知道何时类释放资源,而不是等待GC发生。
使用P / Invoke在.NET中几乎没有什么是不可能的(最明显的是设备驱动程序)。
还有一些建议不使用.NET的东西 (例如shell扩展,它被加载到打开文件对话框1的任何进程中)。
最后,如果可能的话,在.NET中会有更难的事情(例如,创建聚合FTM的COM组件)。
1如果该进程已使用不同版本的.NET,则会产生问题。 这将在以后得到缓解,.NET 4能够支持运行时的并排实例。
我不确定你是在谈论语言功能还是应用程序。 我的答案是应用程序/组件。
实际上,在C#中你只能用C ++做两件事。
这里最值得注意的项目是设备驱动程序。 这是一个只接受本机组件的框架,无法插入托管组件。
对于其他所有事情,可以在C#中使用与C ++相同的功能。 很多情况下你根本就不想这样,本机解决方案更好。 例如,可以通过不安全的代码或IntPtr来管理和操作C#中的内存。 它不是那么简单,一般没有理由。
您无法为其中一个编写设备驱动程序。
我认为有几点重要:
您可以使用C#/ C ++ / Java / Python / Lisp或几乎任何其他语言执行任何操作,最后所有这些语言都可以完成;)
...问题是它是否适合您的需求?
事实上,大多数桌面应用程序:Web浏览器,Word处理器,桌面环境本身(如Windows资源管理器,KDE或Gnome)都是用编译语言编写的,仔细考虑资源......否则,它们只会是非常繁琐的应用程序。
虽然在C#中编写shell扩展可以在C#中编写,但几乎不可能为Vista和Windows 7编写shell扩展.Shell扩展和Namespace扩展(以及使用新的Properties系统的任何其他东西)(kindof)必须在C ++中完成除非你感到痛苦 。
有两个明显的答案:
但是,系统调用没有问题。 p / invoke允许你用C#做那些,几乎和C ++一样容易。
特别是C#和.NET一般自编译(这不是一个巨魔,我真的不知道)? 如果没有,您可以使用VC ++编写C#和.NET,但不能使用C#执行相同的工作。
这是舌头的问题,但它也是你的问题的答案......你可以在VC ++中比在VC#中更严重地搞砸了。 并不是说你无法在VC#中严重搞砸,但总的来说,你可以在VC ++中更容易,更彻底地搞砸它们。
再次,脸上的舌头,但也回答你的问题。 也许不是你所希望的,但...... :-)
还有硬实时应用程序。 任何具有GC的语言都不能使用,以防万一它决定在代码的时间限制部分收集。 Java因为甚至不允许你尝试而臭名昭着(因此EULA关于不将其用于“用于任何核设施的设计,建造,运营或维护的软件”)
(是的,我知道他们已经为实时系统制作了Java的修改版本)。
例如,如果翻译现有库的头文件比放弃现有托管库更难,则使用C ++是有意义的。
主要区别是:
C ++是一种核心语言,您可以使用它来构建独立程序。 这些程序直接与操作系统通信,而不是其他任何内容。 C ++编译器或多或少存在于所有平台(操作系统)中。
C#是一种符合CLS的语言。 如果没有CLI引擎(.NET Framework,Mono等),用C#编写的程序就无法启动。 用C#编写的程序与.NET框架和操作系统进行通信。 你中间有个男人。 像所有维修人员一样,这个人可以提供帮助,但会造成额外的麻烦。 如果您想要移植,则中间有一个不同的人等。所有平台都不存在CLI实现。
根据我的观点,每个额外的框架都是问题的另一个来源。
使用SSE指令似乎是这些情况之一。 某些.NET运行时将使用一些SSE指令,具体取决于您的代码。 但在VC ++中,您可以直接使用SSE内在函数。 所以,如果您正在编写多媒体代码,那么您可能需要C ++。 (可能是C ++ / CLI也可以工作)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.