Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 托管CLR与使用ClrCreateManagedInstance相比,有哪些好处?_C#_.net_Delphi_Interop - Fatal编程技术网

C# 托管CLR与使用ClrCreateManagedInstance相比,有哪些好处?

C# 托管CLR与使用ClrCreateManagedInstance相比,有哪些好处?,c#,.net,delphi,interop,C#,.net,Delphi,Interop,如前所述,我已成功实现Win32应用程序和托管.Net dll之间的互操作。但我也了解到,可以在非托管进程内托管整个CLR 所以我的问题是:你为什么要这么做?它比仅仅使用一个对象要复杂一些——增加复杂性的代价会给您带来什么好处 编辑:我从2个第一个答案中了解到,你可以根据自己的需要定制CLR——这意味着如果你正在编写一个简单的商业应用程序,你将永远不需要主持。托管适用于浏览器或SQL Server等系统密集型应用程序。您可能有一个遗留应用程序,并希望允许第三方从您的应用程序中使用.net的功能,

如前所述,我已成功实现Win32应用程序和托管.Net dll之间的互操作。但我也了解到,可以在非托管进程内托管整个CLR

所以我的问题是:你为什么要这么做?它比仅仅使用一个对象要复杂一些——增加复杂性的代价会给您带来什么好处


编辑:我从2个第一个答案中了解到,你可以根据自己的需要定制CLR——这意味着如果你正在编写一个简单的商业应用程序,你将永远不需要主持。托管适用于浏览器或SQL Server等系统密集型应用程序。

您可能有一个遗留应用程序,并希望允许第三方从您的应用程序中使用.net的功能,但特别是以受控的方式,例如控制从何处加载程序集。是一个例子。

您可能有一个遗留应用程序,希望允许第三方从应用程序中使用.net的功能,但特别是以受控方式使用,例如控制从何处加载程序集。是一个例子。

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

Microsoft SQL Server广泛使用它来替代安全性、程序集加载、内存管理、线程管理等等。关于此主题的一本好书是“自定义Microsoft.NET Framework公共语言运行时”。

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

  • 运行时可调用包装器(RCW)-从.NET调用COM对象
  • COM可调用包装器(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等之后变得更加稳定。

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

  • 运行时可调用包装器(RCW)-从.NET调用COM对象
  • COM可调用包装器(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等之后,变得更加稳定。

好链接,谢谢。不过,我的问题更多的是关于为什么你需要更多的控制。很好的链接,谢谢。不过,我的问题更多地围绕着为什么你需要更多的控制。