次の方法で共有


IUnknown_Set関数 (shlwapi.h)

コンポーネント オブジェクト モデル (COM) インターフェイス ポインターの値を変更し、前のインターフェイスを解放します。

構文

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

パラメーター

[in, out] ppunk

種類: IUnknown**

パンクに割り当てられたポインターを受け取る COM インターフェイス ポインターのアドレス。 ポインターの前の値が NULL 以外の場合、関数は IUnkown::Release メソッドを呼び出して、そのインターフェイスを解放します。

[in, optional] punk

種類: IUnknown*

ppunk にコピーするインターフェイス ポインター。 値が NULL 以外の場合、関数はインターフェイスの参照カウントをインクリメントします。

戻り値

なし

解説

この関数は、スマート ポインターの動作を模倣します。 概念的には、この関数は次の処理を行います。

  • ppunkNULL 以外の場合は、元のインターフェイスを解放します
  • パンクppunk に割り当てます
  • パンクNULL 以外の場合は、パンクによって指されるインターフェイスで 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 Professional、Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server、Windows Server 2003 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shlwapi.h
[DLL] Shlwapi.dll (バージョン 5.0 以降)