Win32 API 日本語リファレンス
ホームSystem.Ole › IObjectWithSite

IObjectWithSite

COM
IIDfc4801a3-2ba9-11cf-a229-00aa003d7352継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

オブジェクトとコンテナー内のサイトとの間の通信をサポートする簡単な方法を提供します。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetSite(IUnknown* pUnkSite)

コンテナーが、そのサイトのインターフェイスへのポインターをオブジェクトに渡せるようにします。

pUnkSiteIUnknown*inこのオブジェクトを管理するサイトの IUnknown インターフェイスポインターへのポインター。NULL の場合、オブジェクトは既存のサイトに対して Release を呼び出す必要があり、その時点でオブジェクトは自身のサイトを認識しなくなります。

戻り値

このメソッドは成功時に S_OK を返します。

解説(Remarks)

オブジェクトはこのポインターを保持し、その際に IUnknown::AddRef を呼び出す必要があります。オブジェクトが既にサイトを持っている場合は、その既存サイトの IUnknown::Release を呼び出し、新しいサイトのポインターを保存して、新しいサイトの IUnknown::AddRef を呼び出す必要があります。

E_NOTIMPL は許可されません。SetSite メソッドを実装しない場合、IObjectWithSite インターフェイスは不要になります。

vtbl 4 HRESULT GetSite(GUID* riid, void** ppvSite)

SetSite を使用して渡された最新のサイトを取得します。

riidGUID*inppvSite で返されるべきインターフェイスポインターの IID。
ppvSitevoid**outriid で要求されたインターフェイスポインターを受け取るポインター変数のアドレス。正常に返された場合、*ppvSite には SetSite で最後に確認されたサイトへの、要求されたインターフェイスポインターが格納されます。返される具体的なインターフェイスは riid 引数に依存します。本質的に、これら 2 つの引数は QueryInterface の引数とまったく同じように動作します。適切なインターフェイスポインターが利用可能な場合、オブジェクトは正常に返す前にそのポインターに対して AddRef を呼び出す必要があります。利用可能なサイトがない場合、または要求されたインターフェイスがサポートされていない場合、このメソッドは *ppvSiteNULL に設定し、失敗コードを返す必要があります。

戻り値

このメソッドは成功時に S_OK を返します。その他に返される可能性がある値には、次のものがあります。

戻り値のコード 説明
E_FAIL
サイトが存在しません。この場合、返却時に *ppvSite には NULL が格納されます。
E_NOINTERFACE
サイトは存在しますが、riid で要求されたインターフェイスをサポートしていません。

解説(Remarks)

E_NOTIMPL は許可されません。このインターフェイスを実装するオブジェクトは、IObjectWithSite::SetSite で最後に確認されたサイトを返すことができなければなりません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IObjectWithSite "{FC4801A3-2BA9-11CF-A229-00AA003D7352}"
#usecom global IObjectWithSite IID_IObjectWithSite "{}"
#comfunc global IObjectWithSite_SetSite  3 sptr
#comfunc global IObjectWithSite_GetSite  4 var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。