修改 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 >>
{
...
};

现在,将 CustomRS.h 中的 COM 接口映射编辑为如下

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

此代码创建一个 COM 接口映射,用于指示 CMyRowsetImplIRowsetIRowsetLocate 接口调用 QueryInterface。 为了获得其他行集类的所有实现,映射将 CMyRowsetImpl 类链接回由 OLE DB 模板定义的 CRowsetBaseImpl 类;该映射使用 COM_INTERFACE_ENTRY_CHAIN 宏,该宏指示 OLE DB 模板扫描 CRowsetBaseImpl 中的 COM 映射以响应 QueryInterface 调用。

最后,通过将 CCustomRowset 修改为从 CMyRowsetImpl 继承,将 CCustomRowset 链接到 CMyRowsetBaseImpl,如下所示:

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

CCustomRowset 现在可以使用 IRowsetLocate 接口,同时利用行集类的其余实现。

完成此操作后,可以动态确定返回给使用者的列

另请参阅

增强简单的只读提供程序