CoRegisterInitializeSpy 函数 (objbase.h)

注册 IInitializeSpy 接口的实现。 定义 IInitializeSpy 接口以允许开发人员在 COM 单元上执行初始化和清理。

Syntax

HRESULT CoRegisterInitializeSpy(
  [in]  IInitializeSpy *pSpy,
  [out] ULARGE_INTEGER *puliCookie
);

参数

[in] pSpy

指向 IInitializeSpy 实现实例的指针。

[out] puliCookie

用于存储标识此注册的 Cookie 的地址。

返回值

此函数可以返回标准返回值E_INVALIDARG,以及以下值。

返回代码 Description
S_OK
已成功注册对象。
E_NOINTERFACE
对象不支持 IInitializeSpy

注解

CoRegisterInitializeSpy 函数注册 IInitializeSpy 接口的实现,该接口定义调用 CoInitializeEx(或 CoInitialize)或 CoUninitialize 时要调用的方法。

CoRegisterInitializeSpy 调用 queryInterface ,以便在 pSpy 上IID_InitializeSpy。 它将返回的接口指针的地址存储在线程特定的存储中,该存储独立于此线程的 COM 初始化状态。 成功后,它将存储在 puliCookie 中,这是表示此注册 的 ULARGE_INTEGER cookie。 将此 Cookie 传递给 CoRevokeInitializeSpy 以撤销注册。

IInitializeSpy 实现必须处理由从通知方法中调用 CoInitializeExCoUninitialize 引起的嵌套问题。 只有在注册在此线程上发生后,才会发生通知。 例如,如果在 CoRegisterInitializeSpy 之前调用 CoInitializeEx,则不会调用 PreInitializePostInitialize 通知方法。

通知方法不得通过引发异常导致 CoInitializeExCoUninitialize 失败。 IInitializeSpy 的实现不得将异常传播到调用 CoInitializeExCoUninitialize 的代码。

在对 CoInitializeExCoUninitializeEx 的当前顶级(非嵌套)调用期间,从 IInitializeSpy 方法调用中调用 CoRegisterInitializeSpy 是否有效是不可预测的。 对于将来对 CoInitializeExCoUninitialize 的顶级调用,IInitializeSpy 的注册实现将始终有效。

要求

Requirement 价值
最低支持的客户端 具有 SP1 的 Windows XP [仅限桌面应用]
支持的最低服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows操作系统
Header objbase.h
Library Ole32.lib
DLL Ole32.dll

另请参阅

CoRevokeInitializeSpy

IInitializeSpy