CorBindToRuntime 函数
使非托管主机能够将公共语言运行时 (CLR) 加载到进程中。
.NET Framework 4 中已弃用此函数。
语法
HRESULT CorBindToRuntime (
[in] LPCWSTR pwszVersion,
[in] LPCWSTR pwszBuildFlavor,
[in] REFCLSID rclsid,
[in] REFIID riid,
[out] LPVOID FAR *ppv
);
参数
pwszVersion
[in] 一个字符串,用于描述要加载的 CLR 版本。
.NET Framework 中的版本号由句点分隔的四个部分组成:major.minor.build.revision。 作为 pwszVersion
传递的字符串必须以字符“v”开头,后接版本号的前三个部分(例如“v1.0.1529”)。
某些版本的 CLR 装有一个策略语句,该声明指定与以前版本的 CLR 的兼容性。 默认情况下,启动 shim 根据策略语句评估 pwszVersion
,并加载与所请求版本兼容的最新版运行时。 主机可以通过为 flags
参数传递 STARTUP_LOADER_SAFEMODE
值来强制 shim 跳过策略评估并加载 pwszVersion
中指定的确切版本,如下所述。
如果调用方为 pwszVersion
指定 null,则加载最新版本的运行时。 传递 null 会导致主机无法控制要加载哪个版本的运行时。 尽管在某些情况下可能适合使用这种方法,但强烈建议主机提供要加载的特定版本。
pwszBuildFlavor
[in] 一个字符串,用于指定是要加载 CLR 的服务器版本还是工作站版本。 有效值为 svr
和 wks
。 服务器版本已经过优化,可利用多个处理器进行垃圾回收;工作站版本已针对在单处理器计算机上运行的客户端应用程序进行优化。
如果 pwszBuildFlavor
设置为 null,则加载工作站版本。 在单处理器计算机上运行时,即使 pwszBuildFlavor
设置为 svr
,也始终加载工作站版本。 但是,如果将 pwszBuildFlavor
设置为 svr
并指定了并发垃圾回收(请参阅 flags
参数的介绍),则会加载服务器版本。
rclsid
[in] 实现 ICorRuntimeHost 或 ICLRRuntimeHost 接口的组件类的 CLSID
。 支持的值为 CLSID_CorRuntimeHost 或 CLSID_CLRRuntimeHost。
riid
[in] rclsid
中的请求的接口的 IID
。 支持的值为 IID_ICorRuntimeHost 或 IID_ICLRRuntimeHost。
ppv
[out] 返回的指向 riid
的接口指针。
备注
如果 pwszVersion
指定了不存在的运行时版本,则 CorBindToRuntimeEx
将返回 HRESULT 值 CLR_E_SHIM_RUNTIMELOAD。
CorBindToRuntimeEx 和 CorBindToRuntime
执行相同的操作,但 CorBindToRuntimeEx
函数允许设置标志来指定 CLR 的行为。
Windows 标识的执行上下文和流
在 CLR 版本 1 中,WindowsIdentity 对象不会流经新线程、线程池或计时器回调等异步点。 在 CLR 版本 2.0 中,ExecutionContext 对象包装有关当前正在执行的线程的某些信息,并使其流经任何异步点,但不会跨越应用程序域边界。 同样,WindowsIdentity 对象也流经任何异步点。 因此,线程上的当前模拟(如果有)也会流动。
可通过两种方式更改流:
通过修改 ExecutionContext 设置来按线程抑制流动(请参阅 SuppressFlow、SuppressFlow 和 SuppressFlowWindowsIdentity 方法)。
将进程默认模式更改为版本 1 兼容性模式,在此模式下,不管当前线程上的 ExecutionContext 设置如何,WindowsIdentity 对象都不会流经任何异步点。 如何更改默认模式取决于是使用托管可执行文件还是非托管主机接口来加载 CLR:
如果使用托管可执行文件,则必须将 <legacyImpersonationPolicy> 元素的
enabled
属性设置为true
。如果使用非托管主机接口,请在调用
CorBindToRuntimeEx
函数时在flags
参数中设置STARTUP_LEGACY_IMPERSONATION
标志。
版本 1 兼容性模式适用于整个进程以及进程中的所有应用程序域。
要求
平台:请参阅系统要求。
标头:MSCorEE.h
库:MSCorEE.dll
.NET Framework 版本:自 1.0 起可用