C# 在VC++;(本地)可以';VC做不到?
在VC++(本机)中可以做哪些不能用VC完成的事情C# 在VC++;(本地)可以';VC做不到?,c#,c++,visual-c++,C#,C++,Visual C++,在VC++(本机)中可以做哪些不能用VC完成的事情 据我所知,唯一值得使用VC++native的是当您需要自己管理内存而不是CLR垃圾收集器时,我也没有看到这样做的目的(但这是后面要问的另一个问题).您不能为一个设备编写驱动程序。使用p/Invoke,在.NET中几乎没有什么不可能的(最明显的是设备驱动程序) 还有一些建议是不要使用.NET(例如,shell扩展名,它被加载到打开文件对话框1的任何进程中) 最后,如果可能的话,在.NET中还有一些事情要困难得多(例如,创建一个聚合FTM的COM组
据我所知,唯一值得使用VC++native的是当您需要自己管理内存而不是CLR垃圾收集器时,我也没有看到这样做的目的(但这是后面要问的另一个问题).您不能为一个设备编写驱动程序。使用p/Invoke,在.NET中几乎没有什么不可能的(最明显的是设备驱动程序) 还有一些建议是不要使用.NET(例如,shell扩展名,它被加载到打开文件对话框1的任何进程中) 最后,如果可能的话,在.NET中还有一些事情要困难得多(例如,创建一个聚合FTM的COM组件)
1如果该进程已在使用不同版本的.NET,则可能会产生问题。这应该在将来得到缓解,因为.NET 4能够支持运行时的并行实例。特别是C#还是.NET一般的自编译(这不是一个巨魔,我真的不知道)?如果不是的话,你可以用VC++写C#和.NET,但你不能用C#做同样的工作。这是开玩笑,但也是对你问题的回答。。。在VC++中,你可能会比在VC中把事情搞得更糟。并不是说你不能在VC中把事情搞得一团糟,但一般来说,你可以在VC++中更轻松、更彻底地把事情搞得一团糟
再说一次,有点开玩笑,但也是对你问题的回答。也许不是你所希望的,但是…:-) > P>例如,如果对现有库的头文件进行翻译比放弃现有的托管库更困难,使用C++是有意义的。 < P>而在WindowsXP中编写shell扩展是可能的,在C语言中,为Vista和Windows 7编写shell扩展几乎是不可能的。shell扩展和命名空间扩展(以及使用新属性系统的任何其他)(KoNoF)必须在C++中完成,除非你陷入痛苦。UL>
我不确定您是在谈论语言功能还是应用程序。不过,我的答案是针对应用程序/组件
在C++中,只有2件事是你不能做的,你可以在C++中做。p>
- 不能使用C#或任何其他.Net语言为仅接受本机组件的系统编写组件
- 不能使用C#或任何其他.Net语言更改CLR不允许自定义的CCW的某些属性
对于其他事物,在C++中也可以做同样的事情,就像C++一样。在很多情况下,您根本不想这样做,而本机解决方案更好。例如,可以通过不安全代码或IntPtr管理和操作C#中的内存。这几乎不那么容易,而且通常没有理由 跨平台开发。是的,Mono是存在的,Java在更多平台上的功能完全相同,这在某种程度上是可以预测的,你可以找到一个C/C++编译器,适用于几乎任何平台,而你不能使用C# 还链接到第三方库,我相信在C语言中有一种方法来使用它们,在C++中,如果没有互操作(封送等),您就可以利用它们。
编辑:最后一件事:可靠的内存管理。是的,您可以使用
dispose()
,然后最后再试一次
,但没有什么比从堆栈中弹出内存时知道内存已经用完更重要的了。通过RAII等技术,当您使用构造良好的类时,您将知道类何时释放资源,而不是等待GC发生。有两个明显的答案:
- 没有.NET,VC永远无法运行 框架本地C++可以。那可能 在某些领域(其他领域)是必要的 已经提到了设备驱动程序,但是 更常见的例子可能是 使用.NET framework的客户端 没有安装。也许你是 分发应用程序和 知道不是所有的客户都是 愿意安装.NET,所以您的 如果你制作了一个应用程序,销售额会上升 这在没有压力的情况下奏效了 对.NET的依赖。或者,您可能 在某些移动设备上工作 所占用的数兆字节 无法证明.NET CF是合理的。或shell扩展,在这些扩展中,使用.NET可能会给用户带来严重的问题
系统调用没有问题,P/Unjk让你从C++中做到这些,几乎可以从C++中做到。
< P>还有硬实时应用程序。任何一种GC都不能使用,只是为了在代码的时间限制部分收集。java甚至不允许你尝试。(因此,EULA禁止将其用于“用于任何核设施的设计、建造、运行或维护”的软件)(是的,我知道他们已经为实时系统制作了Java的修改版)。我认为有几个要点: 你可以用C#/C++/Java/Python/Lisp或几乎任何其他语言做任何事情,最后它们都是图灵完成的
)
…问题是它适合你的需要吗