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 实现必须处理由从通知方法中调用 CoInitializeEx 或 CoUninitialize 引起的嵌套问题。 只有在注册在此线程上发生后,才会发生通知。 例如,如果在 CoRegisterInitializeSpy 之前调用 CoInitializeEx,则不会调用 PreInitialize 和 PostInitialize 通知方法。

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

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

要求

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

另请参阅

CoRevokeInitializeSpy

IInitializeSpy