gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:1053回复:2

[转帖]ARCGIS83代码到ARCGIS9代码的转换说明

楼主#
更多 发布于:2005-03-15 17:44
  ArcGIS 9.0对类型库的结构做了一些改变,这些类型库定义了开发者使用的ArcObjects的类和接口。新的类型库需要对以前基于ArcObjects的开发程序进行一些改变。这个文档描述了这些改变的原因、把现存的ArcObjecs代码从8.X转变为9.0的步骤和在转换过程中将会用到的功用(Utilities)。
<P>  (一) 背景(BackGraoud) </P>
<P>     在ArcGIS 8.*中,除了扩展和控件外的所有组件库信息都被放置在单一的文件中。这就意味着在VB工程中仅仅加入一个ESRI Object Library参考(Reference)就可以得到ArcObjects。在代码中你可以使用下面的语法来声明包含在esriCore.olb中定义的组件。 </P>
<P>     Dim pAV as esriCore.IActiveView </P>
<P>     上面例子中的组件库的名称esriCore已经清晰的给出。这不是完全有必要的,如下的例子也可以被使用,并且具有相同的效果。 </P>
<P>      Dim pAV as IActiveView </P>
<P>     前面版本(8.*)可以对使用的接口做清晰的表达。但第三方软件有时可能定义一个具有同样名字的接口,所以一般在第三方软件中进行开发时,无论定义接口,还是新建一个对象或者实现一个接口,建议清晰的标注出组件库的名字。 </P>
<P>      Set pEnv = new esriCore.Envelope </P>
<P>      Implements esriCore.ITool </P>
<P>      在ArcGIS 9.0中由许多不同的类型库来包含所有的ArcObjects类型信息,把esriCore.olb有效地分为更小的、更易于管理的组件库。这些组件库主要是基于功能来进行组合的,如Geometry, Cartography, Geodatabase等等。 </P>
<P> (二) 在ArcGIS 9.0中需要改变哪些? </P>
<P>    对于开发者来说,类型库的重新组合主要有两个影响: </P>
<P>    1  在工程中从仅仅添加一个ESRI Object Library,变为需要添加所有你要用到的这些组件库。如果你使用VBA进行开发,由于所有基本的ArcGIS组件库参考都被自动地添加到VBA环境中,那么将不会有这方面的影响。 </P>
<P>    2  对于已经存在的源代码,任何显式使用的组件库名字,如esriCore将被改变成其对应的新的组件库名字,主要包含如下情况: </P>
<P>        A) 声明(程序中参数亦如此) </P>
<P>            Dim pEnv As esriCore.IEnvelope --> Dim pEnv As esriGeometry.IEnvelope </P>
<P>           Dim pFillSym As esriCore.IFillSymbol --> Dim pFillSym As esriDisplay.IFillSymbol </P>
<P>           ZoomToPoint(inPt As esriCore.IPoint)--> ZoomToPt(inPt As esriGeometry.IPoint)</P>
<P>       B) 实例化 Set pPt = New esriCore.Point -->Set pPt = New esriGeometry.Point</P>
<P>       C) 实现接口(Implementations) Implements esriCore.ITool --> Implements esriSystemUI.ITool</P>
<P>       D)ProgIDs(the text alias for a CLSID) </P>
<P>           Dim pUID as New UID </P>
<P>           pUID.Value = "esriCore.ZoomInTool" -->  pUID.Value = "esriArcMapUI.ZoomInTool"</P>
<P>           但是,如果我们使用的是CLSIDS,那么就不用改变(因为ArcObjects的CLSIDS没有发生变化),如下的代码即可在8.*中运行也可在9.0中运行: </P>
<P>           Dim pUID as New UID pUID.Value = "{E1F29C6B-4E6B-11D2-AE2C-080009EC732A}" </P>
<P>     3 ArcGIS 8.*使用ESRILicenseInfo组件类来管理许可(licensing),而在9.*中却是使用AoInitialize组件类管理许可。</P>
<P>       关于AoInitialize组件的详细信息,可以通过他的参考文档得到。 </P>
<P>     4  另外,在NET环境下存在以下几个问题。(略)</P>
<P>   (三)  什么时候需要改变代码? </P>
<P>     由于ArcObjects中的类和接口的GUIDs没有发生变化,所以许多打包的ArcGIS定制都可以在9.0中继续工作。但是,由于存在可能导致现存打包失败的脚本(scenarios),所以一般情况下我们都应该对源代码在9.0的环境中重新进行编译并打包。 </P>
<P>    1 任何使用了ProgID字符串(如上面的例子)将不得不改变组件库的名字。 </P>
<P>    2 ArcGIS 8.3中不经常使用的类和接口被删除,他在9.0中是不包括的。 </P>
<P>    3 如果代码中包含esriCore,将导致VBA打包失败。 </P>
<P>    4 VB中实现的非模式对话框在9.0中将不能工作。 </P>
<P>     有哪些可使用的功用来协助完成代码转换? 这些工具已经被ESRI公司用来转换来更新ArcGIS开发的例子。 Visual Basic 6 Code Converter add-in可用来对VB6.0的代码进行转换。 </P>
<P>    1 从工程参考中移除ESRI Object Library参考 </P>
<P>    2 用对源代码中esriCore将采用的恰当的类库名称取代。</P>
<P>      例如 Set pPoly = New esriCore.Polygon 将转换为: </P>
<P>             Set pPoly = New esriGeometry.Polygon </P>
<P>     3 为代码中发现的对象类添加相应的对象类库参考,即使这些对象没有用类库名称做前缀。例如:代码中出现了Dim pPoly As IPolygon,那么将添加esriGeometry参考。 </P>
<P>    4 重新编译工程。 Visual Basic 6 Code Converter add-in 也可以以批处理的方式进行转换,当在批处理转换时,如果出现问题,将把问题以日志形式给出方便人工检查和更正。 Library Locator功用可用来发现包含指定接口、组件类、枚举或结构体的组件库,你也可以通过ArcGIS Developer Help 得到这些信息。 .NET Code Converter Add-in 可对C# 和VB.NET环境下的代码进行转换。 Visual Basic 6 Automatic References add-in可用来在工程中快速添加类型库。 </P>
<P>  (四) 9.0中的其他变化: (略)</P>
<P>       这些主要讲述一些细节的改变,它们在大多数工程中不会涉及到。 </P>
<P>      1 VB中的非模式对话框。 </P>
<P>      2 控件查询接口的变化 </P>
<P>      3 以tagesri开头的枚举变量。 </P>
<P>      4 以esriSR开头的枚举变量,此变量仍旧可以使用,但是最好转换为ArcGIS 9.0中的数字。 </P>
<P>       5 Plug-in data source changes(没做过,不懂) </P>
<P>       6 IEditCache (编辑可以在编辑任务内完成也可以在编辑任务外完成) </P>
喜欢0 评分0
GIS麦田守望者,期待与您交流。
license
路人甲
路人甲
  • 注册日期2003-08-20
  • 发帖数235
  • QQ33281522
  • 铜币366枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-03-17 01:29
<P>ding</P>
Gis的小石块 QICQ:33281522 EMAIL:license@vip.sina.com GIS的麦田守望者,希望和大家交流。 〓〓〓〓〓〓〓〓〓 〓 GISEMPIRE 〓 〓 灌水★波菜 〓 〓 专 用 章 〓 〓〓〓〓〓〓〓〓〓
举报 回复(0) 喜欢(0)     评分
license
路人甲
路人甲
  • 注册日期2003-08-20
  • 发帖数235
  • QQ33281522
  • 铜币366枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-03-17 01:29
ding
Gis的小石块 QICQ:33281522 EMAIL:license@vip.sina.com GIS的麦田守望者,希望和大家交流。 〓〓〓〓〓〓〓〓〓 〓 GISEMPIRE 〓 〓 灌水★波菜 〓 〓 专 用 章 〓 〓〓〓〓〓〓〓〓〓
举报 回复(0) 喜欢(0)     评分
游客

返回顶部