OGRErr AODataSource::DeleteLayer( int iLayer ) { if( iLayer < 0 || iLayer >= static_cast<int>(m_layers.size()) ) return OGRERR_FAILURE; // Fetch ArObject Table before deleting OGR layer object ITablePtr ipTable; m_layers[iLayer]->GetTable(&ipTable); std::string name = m_layers[iLayer]->GetLayerDefn()->GetName(); // delete OGR layer delete m_layers[iLayer]; m_layers.erase(m_layers.begin() + iLayer); IDatasetPtr ipDataset = ipTable; HRESULT hr; if (FAILED(hr = ipDataset->Delete())) { CPLError( CE_Warning, CPLE_AppDefined, "%s was not deleted however it has been closed", name.c_str()); AOErr(hr, "Failed deleting dataset"); return OGRERR_FAILURE; } else return OGRERR_NONE; }