AccessViolationException [ArcEngine]
В настоящее время я занимаюсь разработкой с использованием ArcObects 10.2.1, и я столкнулся с этим хитрым исключением:
AccessViolationException обнаружен
Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена.
Источник =System.Windows.Forms
Трассировки стека:
System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
System.Windows.Forms.Control.DefWndProc(Message& m)
System.Windows.Forms.Control.WndProc(Message& m)
System.Windows.Forms.AxHost.WndProc(Message& m)
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
InnerException:
Я попытался аннотировать код и выяснить, где он был неправильным. Я нашел его в последней строке. Но я до сих пор не знаю, как его решить.
public void SetSimpleLabel(IFeatureLayer featLayer, string field, string where = "")
{
IGeoFeatureLayer geoFeatureLayer = featLayer as IGeoFeatureLayer;
IAnnotateLayerPropertiesCollection annoProperties = geoFeatureLayer.AnnotationProperties;
annoProperties.Clear();
ILineLabelPosition position = new LineLabelPosition();
position.Parallel = true;
position.Perpendicular = false;
ILineLabelPlacementPriorities placement = new LineLabelPlacementPriorities();
IBasicOverposterLayerProperties basic = new BasicOverposterLayerProperties();
basic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
basic.LineLabelPlacementPriorities = placement;
basic.LineLabelPosition = position;
ILabelEngineLayerProperties labelProperties = new LabelEngineLayerProperties() as ILabelEngineLayerProperties;
labelProperties.Symbol = sf.CreateTextSymbol(null, 12, null, null, esriTextHorizontalAlignment.esriTHACenter);
labelProperties.BasicOverposterLayerProperties = basic;
labelProperties.Expression = "[" + field + "]";
IAnnotateLayerProperties annoLayerProperties = labelProperties as IAnnotateLayerProperties;
if (where != "")
annoLayerProperties.WhereClause = where;
annoProperties.Add(annoLayerProperties);
geoFeatureLayer.DisplayAnnotation = true; //it cause
}
почему это вызывает исключение? у кого-нибудь есть идеи?