تعديل توريث RMyProviderRowset

لإضافة واجهة IRowsetLocate في مثال موفر بسيط للقراءة فقط، قم بتعديل توريث RMyProviderRowset. بشكل مبدئي، يرث RMyProviderRowset من CRowsetImpl. تحتاج لتعديله ليرث من CRowsetBaseImpl.

للقيام بذلك، قم بإنشاء فئة جديدة CMyRowsetImpl, في MyProviderRS.h:

////////////////////////////////////////////////////////////////////////
// MyProviderRS.h

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

قم الآن بتحرير مخطط واجهة COM في MyProviderRS.h كما يلي:

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.

وأخيراً، قم بربط RAgentRowset إلى CMyRowsetBaseImpl عن طريق تعديل RAgentRowset لترث من CMyRowsetImpl ، كما يلي:

class RAgentRowset : public CMyRowsetImpl<RAgentRowset, CAgentMan, CMyProviderCommand>

RAgentRowset الآن يمكنك استخدام واجهة IRowsetLocate أثناء الاستفادة من باقي تطبيق فئة مجموعة الصفوف.

عندما يتم هذا يمكنك تحديد الأعمدة التي يتم إرجاعها للمستهلك بشكل حيوي .

راجع أيضًا:

المرجع

‏‫تحسين موفر بسيط للقراءة فقط