leowind
路人甲
路人甲
  • 注册日期2004-03-11
  • 发帖数5
  • QQ
  • 铜币128枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1246回复:0

AO8.3升级到9办法-Delphi 7

楼主#
更多 发布于:2004-03-11 12:23
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后缀。

好了,就这些,祝你好运!
喜欢0 评分0
用ESRI的产品4年了,我是一个标准的GIS农民 最近在研究ArcGIS Engine和Server MSN: leowindrain@hotmail.com
游客

返回顶部