|
阅读:1053回复:2
[转帖]ARCGIS83代码到ARCGIS9代码的转换说明
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> |
|
|
|
1楼#
发布于:2005-03-17 01:29
<P>ding</P>
|
|
|
|
2楼#
发布于:2005-03-17 01:29
ding
|
|
|