修改 RCustomRowset 的繼承
若要將 IRowsetLocate
介面新增至簡單的唯讀提供者範例,請修改的 CCustomRowset
繼承。 開始, CCustomRowset
繼承自 CRowsetImpl
。 您必須修改它以繼承自 CRowsetBaseImpl
。
若要這樣做,請在 CustomRS.h 中建立新的類別 CCustomRowsetImpl
:
////////////////////////////////////////////////////////////////////////
// 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 >>
{
...
};
現在,在自定義RS.h 中編輯 COM 介面對應,如下所示:
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY(IRowsetLocate)
COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
此程式代碼會建立 COM 介面對應,告知 CMyRowsetImpl
呼叫 QueryInterface
IRowset
和 IRowsetLocate
介面。 若要取得其他數據列集類別的所有實作,對應會將類別連結 CMyRowsetImpl
回 CRowsetBaseImpl
OLE DB 範本所定義的類別;對應會使用 COM_INTERFACE_ENTRY_CHAIN 巨集,告知 OLE DB 範本掃描 COM 對應以 CRowsetBaseImpl
回應 QueryInterface
呼叫。
最後,藉由修改 CCustomRowset
以繼承自 CMyRowsetImpl
來連結 CCustomRowset
,CMyRowsetBaseImpl
如下所示:
class CCustomRowset : public CMyRowsetImpl<CCustomRowset, CCustomWindowsFile, CCustomCommand>
CCustomRowset
現在 IRowsetLocate
可以使用 介面,同時利用數據列集類別的其餘實作。
完成此動作之後,您可以 動態判斷傳回給取用者的數據行。