托管CLR与使用ClrCreateManagedInstance - 有什么好处?

时间:2009-04-29 04:25:30

标签: c# .net delphi interop

我已经成功实现了Win32应用程序之间的互操作和管理的.Net dll,如here所述。但我也读过here,可以在非托管进程中托管整个CLR。

所以我的问题是:你为什么这样做?它比使用一个对象更复杂一点 - 这个复杂性增加的价格会带来什么好处?

编辑:我从2个第一个答案中理解的是,您可以根据自己的需要自定义CLR - 这意味着如果您正在编写一个简单的商业应用程序,那么您将永远不需要主持。托管是针对系统繁重的东西,比如浏览器或SQL Server。

3 个答案:

答案 0 :(得分:3)

托管CLR通常不是您在托管代码和Win32之间进行互操作的方法。互操作通常有3种方法:

  • 运行时可调用包装器(RCW) - 从.NET调用COM对象
  • COM Callable Wrapper(CCW) - 使.NET对象显示为COM对象
  • P /调用

自.NET的第一个版本以来,这些已得到支持。托管CLR的重点是允许您在非托管应用程序中深入嵌入.NET代码。例如,有一个模块可以在Win32上的Apache中托管.NET,允许它运行.aspx页面。

同样,SQL Server希望人们能够使用托管代码编写扩展存储过程和函数。过去你可以用C / C ++编写这些文件,但如果他们托管了CLR,他们实际上可以让人们用C#编写这些文件。让CLR进入某种状态的工作是它可以安全地嵌入真正推出的时间线,因此诸如控制内存和安全性之类的东西诞生了。 SQL Server有一些严格的稳定性要求,你不能让.NET摇摆不定。

主机API从.NET 1.x显着变为2.x,但由于2.0 CLR已经通过.NET 3.0,3.5等,因此更加稳定。

答案 1 :(得分:2)

您可能拥有遗留应用程序,并且希望允许第三方在您的应用程序中使用.net的工具,尤其是以受控方式 ,例如 控制从哪里加载程序集。 Here就是一个例子。

答案 2 :(得分:2)

Microsoft SQL Server可以直接使用它来替换安全性,程序集加载,内存管理,线程管理等等。关于这个主题的好书是“自定义Microsoft .NET Framework公共语言运行时”。