"类型同时存在于ESRI.ArcGIS.AxMapControl.dll和ESRI.ArcGIS.MapControl.dll中"的错误

本文介绍如何让ArcGIS 9.1与Visual Studio 2005协同工作,包括安装配置步骤及解决命名冲突问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尽管ArcGIS9.2中文版都已经发不了,但是对于学生来说用那个版本到时没多大区别。身边还是有不少朋友再用AE9.1,原来用的时候还不写博客,今天正好有同事碰到问题讨论,想起了自己以前遇到的问题,就这里总结一下。

1.让AE9.1和VS2005一起工作

AE9.1带的针对.net框架的Interop 程序集安装包是为vs2003+.net1.1量身定做的,当时.net2.0还没有出来。

关于Interop 程序集是什么的详细信息,请查询《向 .NET Framework 公开 COM 组件》,MSDN地址是:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxinterop/html/e78b14f1-e487-43cd-9c6d-1a07483f1730.htm  

为了让AE9.1和2005一块工作,需要:

首先,安装.Net1.1 Framework

然后,安装AE9.1 DevKit。

这样才可以在ToolBox中正确添加控件,注意是从.net面板添加,而不是COM面板。还要注意的是控件是以ax开头的(如axMapControl),一般排在开头。命名空间是形如ESRI.ArcGIS.xxxx。

如果没有装1.1框架,也是可以用,但是用的深入的话可能有一些问题,以前遇到过,具体什么问题倒是给忘记了。只是记得需要从COM面板添加,命名空间是如esriMapControl之类的。

2.解决类似"类型同时存在于ESRI.ArcGIS.AxMapControl.dll和ESRI.ArcGIS.MapControl.dll中"的错误

解决问题的要点是其中一个命名空间要取别名代替。取别名的方法如下,记得还得修改引用中程序集dll的别名,如图。

extern alias toc;

extern alias map;

using map.ArcGIS.MapControl;

using toc.ESRI.ArcGIS.TOCControl;


错误信息大概如下:

类型"ESRI.ArcGIS.MapControl.IMapControlEvents2_OnMouseDownEventHandler"同时存在于"d:\Program Files\ArcGIS\DotNet\ESRI.ArcGIS.AxMapControl.dll"和"d:\Program Files\ArcGIS\DotNet\ESRI.ArcGIS.MapControl.dll"中    C:\Documents and Settings\jackey_young\桌面\test\ttt\ttt\Form1.Designer.cs

类型"ESRI.ArcGIS.MapControl.IMapControlEvents2_OnExtentUpdatedEventHandler"同时存在于"d:\Program Files\ArcGIS\DotNet\ESRI.ArcGIS.AxMapControl.dll"和"d:\Program Files\ArcGIS\DotNet\ESRI.ArcGIS.MapControl.dll"中    C:\Documents and Settings\jackey_young\桌面\test\ttt\ttt\Form1.Designer.cs    


using System; using System.Drawing; using System.Linq; using System.Text; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; using System.Runtime.InteropServices; using MapControlApplication1; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.ADF; using ESRI.ArcGIS.SystemUI; using AE_test; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.DataSourcesRaster; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Desktop.AddIns; namespace MapControlApplication1 { public delegate void AfterDrawGeometry(IGeometry geometry); public class DrawPolygoncs : ITool { private IGeometry _polygon=null;//定义一个几何对象,作为绘制结果 private INewPolygonFeedback _polyFeedback=null;//定义一个多边形反馈对象 private IPoint _startPoint=null;//多边形起始结点 private IPoint _endPoint=null;//多边形终止结点 private bool _drawStart=false;//多边形绘制开始标记 public event AfterDrawGeometry eventAfterDrawGeometry; protected AxMapControl myMapControl=null; protected ESRI.ArcGIS.Controls.IHookHelper myHook; //返回结果多边形 public IGeometry Polygon { get{ return _polygon;} } public override void OnCreate(object hook) { myHook.Hook= hook; if(myHook == null) myHook=new ESRI.ArcGIS.Controls.HookHelperClass(); if(_drawStart) { (myHook.Hook as IMapControl3).CurrentTool=this; _polyFeedback = new NewPolygonFeedbackClass(); _polyFeedback.Display=myHook.ActiveView.ScreenDisplay; } } public override void OnClick()//单击鼠标开始绘图或添加结点 { _polygon=null;//每次重设多边形为空值 _drawStart=true;//开始绘制标记置为true (myHook.Hook as IMapControl).CurrentTool=this; _polyFeedback=new NewPolygonFeedbackClass(); _polyFeedback.Display=myHook. ActiveView. ScreenDisplay; } public override void OnMouseDown(int Button, int Shift, int X, int Y) { if(Button ==1) { if(_startPoint == null)//如果是多边形第一个结点 { _startPoint =(myHook.FocusMap as IActiveView).ScreenDisplay. DisplayTransformation.ToMapPoint(X,Y); _polyFeedback.Start(_startPoint);//开始多边形绘制 } else { _endPoint =(myHook.FocusMap as IActiveView).ScreenDisplay. DisplayTransformation.ToMapPoint(X,Y); _polyFeedback.AddPoint(_endPoint);//添加多边形绘制结点 } } } public override void OnMouseMove(int Button, int Shift, int X, int Y) { if(_startPoint !=null) { IPoint movePoint=(myHook.FocusMap as IActiveView).ScreenDisplay. DisplayTransformation.ToMapPoint(X,Y); _polyFeedback.MoveTo(movePoint);//鼠标移动过程中实时显示反馈效果 } } public override void Refresh(int hDC) { base.Refresh(hDC); if (_polyFeedback !=null) { (_polyFeedback as IDisplayFeedback).Refresh(hDC);//实时显示反馈效果 } } public override void OnDblClick()//双击鼠标结束绘图 { _polygon=_polyFeedback.Stop(); _startPoint=null; _drawStart=false; } int ITool.Cursor { get { return 0; } // 返回默认光标 } bool ITool.Deactivate() { return true; // 允许工具取消激活 } bool ITool.OnContextMenu(int x, int y) { return false; // 不处理右键菜单 } void ITool.OnDblClick() { OnDblClick(); // 调用自定义的双击事件 } public void OnKeyDown(int keyCode, int shift) { throw new NotImplementedException(); } public void OnKeyUp(int keyCode, int shift) { throw new NotImplementedException(); } public void OnMouseUp(int button, int shift, int x, int y) { throw new NotImplementedException(); } } }
最新发布
06-12
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值