次の方法で共有


RCustomRowset の継承の変更

単純な読み取り専用プロバイダーの例に IRowsetLocate インターフェイスを追加するには、CCustomRowset の継承を変更します。 最初、CCustomRowsetCRowsetImpl を継承します。 CRowsetBaseImpl を継承するように変更する必要があります。

これを行うには、新しいクラス CCustomRowsetImplCustomRS.h に作成します。

////////////////////////////////////////////////////////////////////////
// CustomRS.h

template <class T, class Storage, class CreatorClass, class ArrayType = CAtlArray<Storage>>
class CMyRowsetImpl:
   public CRowsetImpl<T, Storage, CreatorClass, ArrayType, CSimpleRow, IRowsetLocateImpl< T, IRowsetLocate >>
{
...
};

ここで、CustomRS.h の COM インターフェイス マップを次のように編集します。

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY(IRowsetLocate)
   COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()

このコードによって、IRowset および IRowsetLocate インターフェイス両方について QueryInterface を呼び出すように CMyRowsetImpl に指示する COM インターフェイス マップが作成されます。 他の行セット クラスの実装をすべて取得するために、マップによって、CMyRowsetImpl クラスが OLE DB テンプレートで定義されている CRowsetBaseImpl クラスにリンクされます。このマップは COM_INTERFACE_ENTRY_CHAIN マクロを使用しますが、このマクロが、QueryInterface 呼び出しに応答して CRowsetBaseImpl の COM マップを使用するように OLE DB テンプレートに指示します。

最後に、CCustomRowsetCMyRowsetImpl を継承するように変更することで、CCustomRowsetCMyRowsetBaseImpl にリンクします。

class CCustomRowset : public CMyRowsetImpl<CCustomRowset, CCustomWindowsFile, CCustomCommand>

これで、CCustomRowsetIRowsetLocate インターフェイスを使用すると同時に、行セット クラスのその他の実装も利用できるようになりました。

これが完了したら、コンシューマーに返される列を動的に決めることができます。

関連項目

単純な読み取り専用プロバイダーの機能の拡張