C# 运行公共语言运行库的非托管组件

C# 运行公共语言运行库的非托管组件,c#,.net,clr,C#,.net,Clr,我是C#的初学者。事实上,几天前刚开始学习这门语言。 我试图建立在与C#相关的.NET框架的概念之上 我在这里读到关于CLR的文章 我不明白的是文本的这一部分,作者说: NET Framework可以由加载 将公共语言运行时导入其进程并启动 托管代码,从而创建一个利用两者的软件环境 托管和非托管功能。NET框架不仅提供了 运行时宿主,但也支持第三方运行时的开发 主持人 我对“非托管组件”的理解是,它们是使用本机Windows API以普通C/C++编写的程序。因此,现在这些非托管程序可以将CLR

我是C#的初学者。事实上,几天前刚开始学习这门语言。 我试图建立在与C#相关的.NET框架的概念之上

我在这里读到关于CLR的文章

我不明白的是文本的这一部分,作者说:

NET Framework可以由加载 将公共语言运行时导入其进程并启动 托管代码,从而创建一个利用两者的软件环境 托管和非托管功能。NET框架不仅提供了 运行时宿主,但也支持第三方运行时的开发 主持人

我对“非托管组件”的理解是,它们是使用本机Windows API以普通C/C++编写的程序。因此,现在这些非托管程序可以将CLR DLL加载到它们的程序地址空间,从而使CLR函数可用,然后这个非托管程序可以使用CLR函数加载托管程序可执行文件。对吗

如果我的理解是正确的,那么我想知道在什么情况下我会这样做?或者我为什么希望非托管程序加载CLR并运行托管代码

此外,作者所说的“NET框架不仅提供了几个 运行时主机,但也支持开发第三方运行时主机“


我认为CLR是.NET Framework中唯一的运行时。

最初Windows都是非托管代码。因此,它将加载.net framework以允许托管代码运行。从维护的角度来看,最好使用托管代码。但是,您不想丢弃数百万行非托管工作代码。如果Microsoft不提供此功能,用户将不得不重新编写所有内容。(不要重写所有内容,请参见链接)。而不是这样做,用户只会忽略.net。

在我看来,引用的段落准确地回答了您的第一个问题:“从而创建了一个利用托管和非托管功能的软件环境”。你为什么要这么做?只有你能说。对于运行时主机,CLR是运行时。运行时主机是运行时的主机。CLR不承载自身。例如,在我问题的第一部分中,我希望得到一个回答:在使用.Net C的丰富经验中,是否有人实际使用了该功能(从非托管应用程序内部运行托管代码)。无论如何。谢谢你的链接。我创建了一个DLL,为托管和非托管代码提供了API。你可以像其他任何.Net dll一样使用c#。然而,我们有客户使用Delphi或非托管C++。许多其他语言仍然提供了使用C风格导出(stdcall或cdecl)从dll导入函数的方法。