我已经成功地在 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/