将公共语言运行时加载到进程中
执行任何托管代码之前,宿主必须首先加载并初始化公共语言运行时 (CLR)。 由于此时运行时尚未在进程中运行,所有宿主都将用非托管的存根 (stub) 启动。 .NET Framework 提供了一组被称为承载 API 的非托管 API,宿主可以利用它们来启动运行时。 有关更多信息,请参见承载接口。
注意 |
---|
.NET Framework 4 版之前的 .NET Framework 版本中提供的承载方法已被弃用。建议您使用 .NET Framework 4 中引入的接口,本主题将对这些接口进行讨论。 |
宿主可以使用以下过程之一将 CLR 加载到进程中:
调用 CLRCreateInstance 函数以获取 ICLRMetaHost 或 ICLRMetaHostPolicy 接口。 CLRCreateInstance 函数取代 .NET Framework 1.1 和 2.0 承载全局静态函数部分中列出的所有 CorBindTo* 函数。
调用 ICLRMetaHost::EnumerateInstalledRuntimes、ICLRMetaHost::GetRuntime 或 ICLRMetaHostPolicy::GetRequestedRuntime 方法以获取有效的 ICLRRuntimeInfo 指针。
调用 ICLRRuntimeInfo::GetInterface 方法。 为 rclsid 参数指定 CLSID_CLRRuntimeHost,并为 riid 参数指定 IID_ICLRRuntimeHost。
所有这些接口的原型均位于 Metahost.h 文件中,该文件位于 Windows 软件开发工具包 (SDK) 的 Include 目录中。 宿主可以使用 ICLRRuntimeInfo 和 ICLRRuntimeHost 接口来控制要加载哪个版本的运行时以及基本功能(如垃圾回收和程序集加载)的行为。
使用 ICLRRuntimeHost 接口可以执行以下操作:
通过调用 ICLRRuntimeHost::Start 方法来启动运行时。
执行托管代码。
获取指向 ICLRControl 接口(可提供对由公共语言运行时实现的管理器的访问)的指针,以及注册实现 IHostControl 接口的宿主控件对象。 公共语言运行时调用 IHostControl 接口来确定宿主实现的管理器。