阅读:1246回复:0
AO8.3升级到9办法-Delphi 7
Delphi 7中如何从ArcObjects8.3升级到ArcGIS Engine?
8.3不能无缝升级到9吗? 不能! 原因: 在ArcObjects8.3中所有接口都在esriCore和esriMapControl包中声明,而ArcObjects9分散在esriCarto、esriMapControl、esriNetworkAnalysis、esriGeometry、esriGeodatabase等多个包中,8.3中的esriCore包已被9的esriCarto包替代(个人理解),故需要在Delphi 7的单元文件中引用相应的包文件。 怎么知道某个接口在那个包文件里呢?猜?那么多接口猜到什么时候啊!还好ESRI提供了一个很好的工具程序,LibraryLocator,该工具程序位于:arcgis\DeveloperKit\tools\LibraryLocator.exe。升级的时候将代码中原来的esriCore_TLB全部替换为esriCarto_TLB,编译,在出错的地方找到出问题的接口,用LibraryLocator确定包文件名称,然后...。需要说明的是,在D7中加入MapControl控件后,部分包文件并没有自动装载,需要手工载入,办法是用Project菜单里的Import type library,9的olb文件位于arcgis\com目录下。 另外一类需要修改的地方是,部分属性如IFeatureLayer的Set_FeatureClass名称改为_Set_FeatureClass了。 知道方法了,升级难度并不大,都是些体力活,不要害怕! 我的网络分析源代码已经升级完了,只碰到这两类情形。 另外一个怪问题:执行MainMap.Extent := MainMap.TrackRectangle后提示:找不到成员。晕死了,没找到原因,现在无法做缩放操作了,只剩Pan能用。另外,调用IFeatureLayer的Get_FeatureClass时报Gdbcorelib.dll内存访问冲突,???? 再有,加载图层后调试时程序无法干净退出,需在适当的地方加一行代码:TerminateProcess(GetCurrentProcess, 2); 8.3不存在该问题,8.1也有该问题,8.2没有试过,也不想试。 在D8里使用ArcGIS Engine 9和在D7里也有些差异,但不多,最关键的一点是创建实例是把原来的co前缀去掉加Class后缀。 好了,就这些,祝你好运! |
|
|