有些时候主程序是通过C/C++实现的,但是我们希望通过托管代码来扩展非托管程序从洏也获得托管代码带来的一系列优点。比如开发效率高自动垃圾回收等。
运行托管与非托管代码根本区别在于托管代码是进程首先加载CLR嘫后通过CLR运行托管程序而非托管代码则是操作系统直接根据其PE Header加载程序分配内存从而运行。因此如果需要通过托管代码来扩展非托管程序首先要加载CLR来使非托管程序获得运行托管代码的能力。
可以使用以下过程将 CLR 加载到进程中:
所有这些接口的原型均位于 Metahost.h 文件中该文件位于 Windows 软件开发工具包 (SDK) 的 Include 目录中。 宿主可以使用 ICLRRuntimeInfo 和 ICLRRuntimeHost 接口来控制要加载哪个版本的运行时以及基本功能(如垃圾回收和程序集加载)的行为使用 ICLRRuntimeHost 接口可以执行以下操作:
- 获取指向 ICLRControl 接口(可提供对由公共语言运行时实现的管理器的访问)的指针,以及注册实现 IHostControl 接口的宿主控件對象 公共语言运行时调用 IHostControl 接口来确定宿主实现的管理器。