STDMETHODIMP CImpIAccessor::FInit ( BOOL fUnderRowset //@parm IN | Is aggregated within Rowset? ) { // Create the Extended Buffer array. // This is an array of pointers to malloc'd accessors. m_pextbufferAccessor = (LPEXTBUFFER) new CExtBuffer; if (m_pextbufferAccessor == NULL || FAILED( m_pextbufferAccessor->FInit( 1, sizeof( PACCESSOR ), g_dwPageSize ))) return ResultFromScode( E_OUTOFMEMORY ); // If aggregated under Rowset do the following: if(fUnderRowset) { // For efficiency reasons put a copy of the accessors buffer // directly on the CRowset object. ((CRowset *)m_pObj)->m_pextbufferAccessor = m_pextbufferAccessor; HRESULT hr; CCommand *pCCommand; CImpIAccessor *pIAccessorCommand; // See if there are any accessors created on the Command object, and if so // copy their handles so they can be used on the Rowset. pCCommand = ((CRowset *)m_pObj)->m_pCreator; if(pCCommand) { if(SUCCEEDED(pCCommand->QueryInterface(IID_IAccessor, (void **)&pIAccessorCommand)) && pIAccessorCommand) { // Copy handles. hr = pIAccessorCommand->CopyAccessors(m_pextbufferAccessor); pIAccessorCommand->Release(); if(FAILED(hr)) return hr; } } } return NOERROR; }