CoRegisterInitializeSpy 函数 (objbase.h)

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

语法

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

参数

[in] pSpy

指向 IInitializeSpy 实现实例的指针。

[out] puliCookie

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

返回值

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

返回代码 说明
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 的代码。

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

要求

要求
最低受支持的客户端 具有 SP1 的 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 objbase.h
Library Ole32.lib
DLL Ole32.dll

另请参阅

CoRevokeInitializeSpy

IInitializeSpy