VC++(本机)可以用VC#做什么?

Phi*_*lip 9 c# c++ visual-c++

VC++(本机)可以用VC#做什么?

从我所知道的唯一值得使用VC++原生的东西就是当你需要自己管理内存而不是CLR垃圾收集器时,我还没有看到任何目的(但这是另一个问题稍后会问) .

Kev*_*son 13

跨平台开发.是单存在,和Java的有些更可预测有它的功能EXACTLY在更多平台上一样,你可以找到几乎任何平台上的C/C++编译器在那里,在那里你不能用C#.

同时链接到第三方库,虽然我确信有一种方法可以在C#中利用它们,但是你可以在C++中没有互操作(Marshaling等)的情况下利用它们.

编辑:最后一件事:可靠的内存管理.是的,你可以使用dispose(),try-finally但是,没有什么比知道当它从堆栈弹出时知道内存消失了.通过像RAII这样的技术,当您使用构造良好的类时,您将知道何时类释放资源,而不是等待GC发生.


Ric*_*ard 8

使用P/Invoke 在.NET中几乎没有什么是不可能的(最明显的是设备驱动程序).

还有一些建议不使用.NET的东西(例如shell扩展,它被加载到打开文件对话框1的任何进程中).

最后,如果可能的话,在.NET中会有更难的事情(例如,创建聚合FTM的COM组件).

1如果该进程已使用不同版本的.NET,则会产生问题.这将在以后得到缓解,.NET 4能够支持运行时的并排实例.

  • 当可以将多个版本的CLR加载到同一进程中时,可能会使用.NET 4.0删除shell扩展"限制". (2认同)

Jar*_*Par 7

我不确定你是在谈论语言功能还是应用程序.我的答案是应用程序/组件.

实际上,在C#中你只能用C++做两件事.

  • 您不能使用C#或任何其他.Net语言为仅接受本机组件的系统编写组件
  • 您不能使用C#或任何其他.Net语言来更改CLR不允许自定义的CCW的某些属性

这里最值得注意的项目是设备驱动程序.这是一个只接受本机组件的框架,无法插入托管组件.

对于其他所有事情,可以在C#中使用与C++相同的功能.很多情况下你根本就不想这样,本机解决方案更好.例如,可以通过不安全的代码或IntPtr来管理和操作C#中的内存.它不是那么简单,一般没有理由.


Otá*_*cio 6

您无法为其中一个编写设备驱动程序.