Eklemek için IRowsetLocate arayüzü basit salt sağlayıcı örneği, devralınmasını değiştirmek RMyProviderRowset . Başlangıçta, RMyProviderRowset CRowsetImpldevralır. CRowsetBaseImpldevralmak için değiştirmeniz gerekir. Bunu yapmak için yeni bir sınıf oluşturmak CMyRowsetImpl , MyProviderRS.h içinde:
////////////////////////////////////////////////////////////////////////
/ / MyProviderRS.h
Şablon lt; sınıf t, sınıf depolama, sınıf CreatorClass, sınıf ArrayType CSimpleArray <Storage> = >
Class CMyRowsetImpl:
Genel CRowsetBaseImpl < t, depolama, CreatorClass, ArrayType >,
Genel IRowsetLocateImpl <T>
{
TypeDef CRowsetBaseImpl < t, depolama, CreatorClass, ArrayType > _RowsetBaseClass;
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
COM_INTERFACE_ENTRY(IRowset)
COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
}
Şimdi, söyleyen bir com arabirimi harita oluşturmak CMyRowsetImpl hem IRowset için QueryInterface çağrısı için ve IRowsetLocate arabirimleri.
////////////////////////////////////////////////////////////////////////
/ / MyProviderRS.h
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
COM_INTERFACE_ENTRY(IRowset)
END_COM_MAP()
Bağlantı-e doğru almak tüm diğer satır kümesi sınıfları için uygulanması, CMyRowsetImpl sınıfı için ole db şablon tarafından tanımlanan CRowsetBaseImpl sınıfı. Bunu yapmak için aşağıdaki kodda gösterildiği gibi COM_INTERFACE_ENTRY_CHAIN makro'ı kullanın. ole db QueryInterface çağrısı karşısında CRowsetBaseImpl com harita taramak için şablonlar COM_INTERFACE_ENTRY_CHAIN makro söyler.
////////////////////////////////////////////////////////////////////////
/ / MyProviderRS.h
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
COM_INTERFACE_ENTRY(IRowset)
COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
Son olarak, bağlantı RAgentRowset için CMyRowsetBaseImpl değiştirerek RAgentRowset dan devralmak için CMyRowsetImpl , burada gösterildiği gibi:
rAgentRowset sınıfı: Genel CMyRowsetImpllt;RAgentRowset, CAgentMan, CMyProviderCommand & gt
RAgentRowsetşimdi-ebilmek kullanma IRowsetLocate uygulanması için satır kümesi sınıfın geri kalanını garantisinden arabirimi.
Bu yapıldığında, IRowsetLocateImpl uygulamak için hazırsınız.