IUnknown_Set 函数 (shlwapi.h)

(COM) 接口指针更改组件对象模型的值,并释放上一个接口。

语法

void IUnknown_Set(
  [in, out]      IUnknown **ppunk,
  [in, optional] IUnknown *punk
);

参数

[in, out] ppunk

类型: IUnknown**

用于接收分配给 punk 的指针的 COM 接口指针的地址。 如果指针的上一个值为非 NULL,则该函数通过调用其 IUnkown::Release 方法释放该接口。

[in, optional] punk

类型: IUnknown*

要复制到 ppunk 的接口指针。 如果值为非 NULL,则该函数将递增接口的引用计数。

返回值

备注

此函数模拟智能指针的行为。 从概念上讲, 函数执行以下操作:

  • 如果 ppunk 为非 NULL,则释放原始接口
  • 朋克 分配给 ppunk
  • 如果 punk 为非 NULL,请在 punk 指向的接口上调用 IUnknown::AddRef。

示例


void sample()
{
  IUnknown *punk = NULL;
  IStream* pstm = NULL;

  if (SUCCEEDED(CreateStreamOnHGlobal(NULL, TRUE, &pstm)) {
    // since punk == NULL, this merely copies the value and AddRef()s it
    IUnknown_Set(&punk, pstm);
    pstm->Release();

    if (SUCCEEDED(CreateStreamOnHGlobal(NULL, TRUE, &pstm)) {
      // this call will release the old value of punk before copying the
      // new value and AddRef()ing it
      IUnknown_Set(&punk, pstm);
      pstm->Release();
    }
  }

  // This call will release whatever punk points to, if anything.
  IUnknown_AtomcRelease((void**)&punk);

  // at this point, punk == NULL
}

要求

   
最低受支持的客户端 Windows 2000 专业版、Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server、Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 shlwapi.h
DLL Shlwapi.dll (5.0 或更高版本)