#pragma once class __declspec(uuid("4065c728-35e0-4f47-ab1a-f1bc2346501b")) IViewRow : public IUnknown { public: virtual HRESULT get_Value( /*in*/ int iWhichColumn, /*out,retval*/ BSTR* pbstColumnValue ) = 0; virtual HRESULT get_Count( /*out,retval*/ int* piColumnCount ) = 0; }; class __declspec(uuid("b0f49322-2f03-490c-b6a0-55d7f1efe719")) IWriteableViewRow : public IViewRow { public: virtual HRESULT set_Value( /*in*/ int iWhichColumn, /*in*/ BSTR bstColumnValue ) = 0; virtual HRESULT set_Count( /*in*/ int iColumnCount, /*in*/ BOOL bClipExtraColumns ) = 0; }; class CRowObject : public IWriteableViewRow { CRITICAL_SECTION m_csColumnDataLock; int m_iColumnCount, m_iMaxColumns; _bstr_t *m_pbstColumnData; LONG m_lRefCount; HRESULT EnsureColumnSize( int iColumnsRequired ); HRESULT Lock(); HRESULT UnLock(); public: CRowObject(); ~CRowObject(); virtual ULONG STDMETHODCALLTYPE AddRef(); virtual ULONG STDMETHODCALLTYPE Release(); virtual HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void** ppvObject ); virtual HRESULT get_Value( /*in*/ int iWhichColumn, /*out,retval*/ BSTR* pbstColumnValue ); virtual HRESULT set_Value( /*in*/ int iWhichColumn, /*out,retval*/ BSTR pbstColumnValue ); virtual HRESULT get_Count( /*out,retval*/ int* piColumnCount ); virtual HRESULT set_Count( /*out,retval*/ int piColumnCount, BOOL bClipExtras ); };