QISearch 関数 (shlwapi.h)
IUnknown::QueryInterface メソッドのテーブル駆動型実装。
構文
HRESULT QISearch(
[in] void *that,
[in] LPCQITAB pqit,
[in] REFIID riid,
[out] void **ppv
);
パラメーター
[in] that
型: void*
COM オブジェクトのベースへのポインター。
[in] pqit
種類: LPCQITAB
QITAB 構造体の配列。 配列内の最後の構造体には、 piid メンバーを NULL に設定し、 その dwOffset メンバーを 0 に設定する必要があります。
[in] riid
型: REFIID
ppv を介して取得するインターフェイスの IID への参照。
[out] ppv
型: void**
このメソッドが正常に返されると、 riid で要求されたインターフェイス ポインターが含まれます。
戻り値
型: HRESULT
要求されたインターフェイスがテーブルで見つかった場合、または要求されたインターフェイスが IUnknown であった場合は、S_OKを返します。 要求されたインターフェイスが見つからなかった場合は、E_NOINTERFACEを返します。
注釈
QISearch がインターフェイスを見つけずにテーブルの末尾に達すると、E_NOINTERFACEが返され、ppv が NULL に設定されます。
テーブルには、該当するすべてのインターフェイスを含める必要があります。 たとえば、オブジェクトが派生インターフェイスを実装する場合は、基本インターフェイスもテーブルに含める必要があります。
riid パラメーターと ppv パラメーターをパッケージ化するには、Objbase.h で定義されているIID_PPV_ARGS マクロを使用することをお勧めします。 このマクロは 、ppv の値によって指されるインターフェイスに基づいて正しい IID を提供します。これにより、 riid でコーディング エラーが発生し、予期しない結果が発生する可能性がなくなります。
例
次の例は、 QISearch を使用して QueryInterface を実装する方法を示しています。 ATL の offsetofclass マクロを使用して、CSample オブジェクトのベースから指定したインターフェイスへのオフセットを計算します。
このオブジェクトは IUnknown 以外の 2 つのインターフェイスをサポートしているため、QITAB テーブルには NULL 以外のエントリが 2 つあります。 各インターフェイスのエントリは、関連付けられた IID (IID_IPersist または IID_IPersistFolder) へのポインターと、クラスの基本ポインターに対するインターフェイス ポインターのオフセットを指定します。 このサンプルでは、ATL の offsetofclass マクロを使用して、そのオフセットを決定します。
class CSample : public IPersistFolder
{
public:
CSample() { /* other construction goes here */ }
STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// *** IPersist ***
STDMETHODIMP GetClassID(CLSID *pClassID);
// *** IPersistFolder ***
STDMETHODIMP Initialize(LPCITEMIDLIST pidl);
private:
// private members go here
};
HRESULT CSample::QueryInterface(REFIID riid, void **ppv)
{
static QITAB rgqit[] =
{
QITABENT(CSample, IPersist),
QITABENT(CSample, IPersistFolder)
{ 0 },
};
return QISearch(this, rgqit, IID_PPV_ARGS(&ppv));
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional、Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server、Windows Server 2003 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | shlwapi.h |
Library | Shlwapi.lib |
[DLL] | Shlwapi.dll (バージョン 5.0 以降) |