OGRErr FGdbDataSource::DeleteLayer( int iLayer ) { if( !m_bUpdate ) return OGRERR_FAILURE; if( iLayer < 0 || iLayer >= static_cast<int>(m_layers.size()) ) return OGRERR_FAILURE; FGdbLayer* poBaseLayer = m_layers[iLayer]; // Fetch FGDBAPI Table before deleting OGR layer object //Table* pTable = poBaseLayer->GetTable(); std::string name = poBaseLayer->GetLayerDefn()->GetName(); std::wstring strPath = poBaseLayer->GetTablePath(); std::wstring strType = poBaseLayer->GetType(); // delete OGR layer delete m_layers[iLayer]; //pTable = NULL; // OGR Layer had ownership of FGDB Table m_layers.erase(m_layers.begin() + iLayer); long hr; if (FAILED(hr = m_pGeodatabase->Delete(strPath, strType))) { CPLError( CE_Warning, CPLE_AppDefined, "%s was not deleted however it has been closed", name.c_str()); GDBErr(hr, "Failed deleting dataset"); return OGRERR_FAILURE; } return OGRERR_NONE; }