ホーム › System.Ole › IObjectWithSite
IObjectWithSite
COM公式ドキュメント
オブジェクトとコンテナー内のサイトとの間の通信をサポートする簡単な方法を提供します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
コンテナーが、そのサイトのインターフェイスへのポインターをオブジェクトに渡せるようにします。
| pUnkSite | IUnknown* | 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 を使用して渡された最新のサイトを取得します。
| riid | GUID* | in | ppvSite で返されるべきインターフェイスポインターの IID。 |
| ppvSite | void** | out | riid で要求されたインターフェイスポインターを受け取るポインター変数のアドレス。正常に返された場合、*ppvSite には SetSite で最後に確認されたサイトへの、要求されたインターフェイスポインターが格納されます。返される具体的なインターフェイスは riid 引数に依存します。本質的に、これら 2 つの引数は QueryInterface の引数とまったく同じように動作します。適切なインターフェイスポインターが利用可能な場合、オブジェクトは正常に返す前にそのポインターに対して AddRef を呼び出す必要があります。利用可能なサイトがない場合、または要求されたインターフェイスがサポートされていない場合、このメソッドは *ppvSite を NULL に設定し、失敗コードを返す必要があります。 |
戻り値
このメソッドは成功時に S_OK を返します。その他に返される可能性がある値には、次のものがあります。
| 戻り値のコード | 説明 |
|---|---|
| サイトが存在しません。この場合、返却時に *ppvSite には NULL が格納されます。 | |
| サイトは存在しますが、riid で要求されたインターフェイスをサポートしていません。 |
解説(Remarks)
E_NOTIMPL は許可されません。このインターフェイスを実装するオブジェクトは、IObjectWithSite::SetSite で最後に確認されたサイトを返すことができなければなりません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
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 指定が可能。#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 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。