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

标签 c# .net delphi interop

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

所以我的问题是:您为什么要这样做?它比仅使用一个对象要复杂一些 - 您以这种增加复杂性的代价获得了哪些好处?

编辑:我从 2 个第一个答案中了解到,您可以根据需要自定义 CLR - 这意味着如果您正在编写一个简单的业务应用程序,则永远不需要托管。托管适用于系统繁重的内容,例如浏览器或 SQL Server。

最佳答案

托管 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 等以来,它变得更加稳定。

关于c# - 托管 CLR 与使用 ClrCreateManagedInstance - 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/800867/

相关文章:

c# - dynamic 关键字影响返回类型

delphi - TIdFtpClient - 在服务器端处理特定错误

Delphi动态数组引用计数

performance - 加快调整网格列大小的过程

c# - C# 如何递归列出目录中的所有文件?

c# - 验证日期的正则表达式 - C#

c# - Visual Studio 中的事件处理程序

c# - 无法在我的解决方案中添加来自新项目的新引用

c# - 如何在 Excel 共享插件中使用对话框

.net - HangFire 作为 .NET 6 的 Windows 服务