IEngineEditor.StartEditing()出现错误的解决办法
IEngineEditor是ArcEngine提供的用于管理编辑的接口,在使用这个接口的时候,笔者遇到了一个问题:
在使用IEngineEditor.StartEditing()这个方法时,总是出现错误.
代码:(引用ArcEngine帮助文档中的一个主题:how to create an edit session中的代码)
privatevoid StartEditing(IMapControl2 m_mapControl)
{
IMap map = m_mapControl.Map;
//If an edit session has already been started, exit.if (m_engineEditor.EditState != esriEngineEditState.esriEngineStateNotEditing)
return ;
//Start editing the workspace of the first feature layer found.for (int layerCounter = 0; layerCounter <= map.LayerCount - 1; layerCounter++)
{
ILayer currentLayer = map.get_Layer(layerCounter);
if (currentLayer is IFeatureLayer)
{
IFeatureLayer featureLayer = currentLayer as IFeatureLayer;
IDataset dataset = featureLayer.FeatureClass as IDataset;
IWorkspace workspace = dataset.Workspace;
m_engineEditor.StartEditing(workspace, map);
((IEngineEditLayers)m_engineEditor).SetTargetLayer(featureLayer);
break;
}
}
}
对于红色的语句,笔者使用的是this.axMapControl1.Map;
在从this.axMapControl1.Map获取要素图层currentLayer时,笔者的for语句为:for(int i=0;i<this.axMapControl1.Map.LayerCount;i++);
对于使用了this.axMapControl1.Map,都出现错误。
“System.Runtime.Interopservices.COMException”异常,并说明“对COM组件的调用返回了错误 HRESULT E_FALL.”
笔者在网上找了很多资料,但都行不通
笔者定义了一个IMap全局对象,来替换掉以前使用的this.axMapControl1.Map,结果能正常运行
如果读者遇到此错误,可以采用这种方法去试一下,另外如果打开了ArcMap的话,尽量不要使用你的实验数据,这样也会导致错误的出现