VC+AE开发遇到的问题及其解决之道

转载 2012年03月22日 17:09:34
 

VC+AE开发遇到的问题及其解决之道

 88人阅读 评论(0) 收藏 举报
 

作者:朱金灿

来源:http://blog.sina.com.cn/explorer101

 

     AE是ESRI的旗舰产品ArcGIS的一个著名开发包。这次开发工具采用Visual C++2005。

首先安装AE 9.3中Runtime和SDK for VC++,如下图所示:

VC+AE开发遇到的问题及其解决之道

 

AE本质上是一个COM库。使用COM库的一个常见问题是类型和系统的一个COM库重定义以及由于版本原因低版本的COM库不同组件之间的互相冲突。所以在AE开发时常会碰到以下编译错误:

错误 8 error C3121: 无法更改“IRow”类的GUID  e:\学习\c#\try again\try again\debug\esrigeodatabase.tlh 96
错误 9 error C2011: “IRow”: “struct”类型重定义 e:\学习\c#\try again\try again\debug\esrigeodatabase.tlh 16693
错误 10 error C2011: “ICursor”: “struct”类型重定义 e:\学习\c#\try again\try again\debug\esrigeodatabase.tlh 16710
错误 11 error C2504: “IRow”: 未定义基类 e:\学习\c#\try again\try again\debug\esrigeodatabase.tlh 17997
错误 12 error C3121: 无法更改“ITableDefinition”类的 GUID  e:\学习\c#\try again\try again\debug\esricarto.tlh 636
错误 13 error C2371: “UINT_PTR”: 重定义;不同的基类型 e:\学习\c#\try again\try again\debug\esricarto.tlh 1733
错误 14 error C2011: “ITableDefinition”: “struct”类型重定义 e:\学习\c#\try again\try again\debug\esricarto.tlh 9865
错误 15 error C2011: “esriControlsMousePointer”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 107
错误 16 error C2011: “esriControlsDragDropEffect”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 144
错误 17 error C2011: “esriControlsDropAction”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 153
错误 18 error C2011: “esriControlsAppearance”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 162
错误 19 error C2011: “esriControlsBorderStyle”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 169

 

IRow接口我估计是个ADO库的接口有冲突。解决这类错误的原则是:

如果和系统组件冲突的话就采用rename关键字进行重命名,如果是不同组件之间的接口冲突的话就用exclude关键字进行排除。

 

#pragma warning(push)

#pragma warning(disable: 4192)

#pragma warning(disable: 4146)

#import "D:\Program Files\ArcGIS\com\esriSystem.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")

#import "D:\Program Files\ArcGIS\com\esriSystemUI.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,  rename("ICommand", "esriICommand"), rename("IProgressDialog", "esriIProgressDialog")

#import "D:\Program Files\ArcGIS\bin\ToolbarControl.ocx" raw_interfaces_only raw_native_types no_namespace named_guids

#import "D:\Program Files\ArcGIS\bin\TOCControl.ocx" raw_interfaces_only, raw_native_types,no_namespace,named_guids,exclude("esriControlsMousePointer","esriControlsDragDropEffect","esriControlsDropAction","esriControlsAppearance","esriControlsBorderStyle")

 

#import "D:\Program Files\ArcGIS\com\esriGeometry.olb" raw_interfaces_only raw_native_types no_namespace named_guids

#import "D:\Program Files\ArcGIS\com\esriDisplay.olb" raw_interfaces_only raw_native_types no_namespace named_guids

 

#import "D:\Program Files\ArcGIS\com\esriGeoDatabase.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,rename("IRow", "esriIRow"), rename("ICursor", "esriICursor")

#import "D:\Program Files\ArcGIS\com\esri3DAnalyst.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")

#import "D:\Program Files\ArcGIS\bin\SceneControl.ocx" raw_interfaces_only raw_native_types no_namespace named_guids

#import "D:\Program Files\ArcGIS\com\esriOutput.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")

 

#import "D:\Program Files\ArcGIS\com\esriNetworkAnalysis.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE", "IStatusBar")

#import "D:\Program Files\ArcGIS\com\esriGeoAnalyst.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE", "IStatusBar")

 

#import "D:\Program Files\ArcGIS\com\esriCarto.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("UINT_PTR"), rename("ITableDefinition", "esriITableDefinition")

 

#import "D:\Program Files\ArcGIS\com\esriSpatialAnalyst.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE", "IStatusBar")

 

#import "D:\Program Files\ArcGIS\com\esriDataSourcesFile.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")

#import "D:\Program Files\ArcGIS\com\esriDataSourcesGDB.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")

#import "D:\Program Files\ArcGIS\com\esriDataSourcesRaster.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")

#pragma warning(pop)

 

    另外在应用系统启动时常会出现以下提示:

“Warning: This application has not been initialized with an ESRI license and will not function correctly. ”,如下图:

VC+AE开发遇到的问题及其解决之道

这时只需在BOOL C***App::InitInstance()函数加入下面代码:

    IAoInitializePtr paoinitialize(CLSID_AoInitialize);

    esriLicenseStatus el = esriLicenseAvailable;

    paoinitialize->Initialize(esriLicenseProductCodeEngine,&el);

 

 

参考文献:

This application has not been initialized with an ESRI license and will not function correctly


 

vc开发ArcEngine时用#import导入库后编译错误的解决

 1248人阅读 评论(0) 收藏 举报
  
        为了使用c++开发程序,必须导入ArcEngine的库,需要直接导入的库在C:/Program Files/ArcGIS/com,路经下面。库文件的后缀名是olb。导入的方式是在stdafx.h头文件中在最下面加入一下语句:
#pragma warning(push)
#pragma warning(disable : 4192) /* Ignore warnings for types that are duplicated in win32 header files */
#pragma warning(disable : 4146) /* Ignore warnings for use of minus on unsigned types */
 
#import "C:/Program Files/ArcGIS/com/esriSystem.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("OLE_COLOR""OLE_HANDLE""VARTYPE")
#import "C:/Program Files/ArcGIS/com/esriSystemUI.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids,exclude("OLE_COLOR","ICommand","IProgressDialog")
#import "C:/Program Files/ArcGIS/com/esriGeometry.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids,exclude("OLE_COLOR")
#import "C:/Program Files/ArcGIS/com/esriDisplay.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids,exclude("OLE_COLOR")
#import "C:/Program Files/ArcGIS/com/esriOutput.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids,exclude("OLE_COLOR")
#import "C:/Program Files/ArcGIS/com/esriGeoDatabase.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids,exclude("OLE_COLOR","IRow","ICursor")
#import "C:/Program Files/ArcGIS/com/esriCarto.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids,exclude("OLE_COLOR","ITableDefinition","UINT_PTR")
 
 
// additionally for 3D controls
#import "C:/Program Files/ArcGIS/com/esri3DAnalyst.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "C:/Program Files/ArcGIS/com/esriGlobeCore.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "C:/Program Files/ArcGIS/bin/SceneControl.ocx" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "C:/Program Files/ArcGIS/bin/GlobeControl.ocx" raw_interfaces_only, raw_native_types, no_namespace, named_guids
 
#pragma warning(pop)
 
        需要注意的是导入后,由于接口冲突,直接编译容易出现错误,如某某接口重定义,一般来说到导入库的顺序是有规则的,如果顺序不对也会在编译时出错。
导入库时如果出现问题,一般可以采用以下方法来处理。
1.如果报的错误是接口重定义错误那么需要在导入语句后面加入exclude(“冲突接口”)
2.如果报的错误是接口重定义,如果按照方法一种的修改仍然不能解决,需要重新命名接口,例如,报ISegment接口重定义,那么直接在导入语句的最后加上rename(“ISegment”, “IESRISegment”),这时的接口IESRISegment就是对ISegment的重命名。
3.如果接口报的错误很多,而错误的形式都是没有定义该接口,这样的错误是没有导入需要的库,可以在ArcEngine中的帮助中找到该接口所属的组件库,然后导入。其次,如果库的导入顺序不对那么也很容易出现以上问题。
4.在stdafx.h头文件中必须要注意,导入库语句的位置,最好是放在最后,要不然也会出现很多错误。
以上的这个问题在vs2003中同样遇到过,只是在vs2005中,这个问题出现的频率更高。
上一篇:windows中消息和事件的区别下一篇:vc++开发ArcEngine中对象实例化的方法


开发过程中遇到问题该怎么办?

开发过程中遇到问题了怎么办日常开发过程中,总会遇到问题,那么遇到问题该怎么办呢?   首先我们把问题分成大的两类:业务问题、技术问题。一、业务问题这类问题一般跟你的需求和设计相关。大致分下列情况:1、...
  • shijing266
  • shijing266
  • 2017年05月05日 16:42
  • 1545

项目开发中遇到的问题汇总~持续更新

项目开发快进入尾声了,之前一直较忙,也由于没有遇到什么可以记载的问题,故此一直未整理,近期渐渐闲下来,会逐渐将这个项目在开发中遇到的问题汇总出来: 1. 集成蓝牙(佳博打印机)要在info里面进行如下...
  • shuidonglCH
  • shuidonglCH
  • 2016年10月05日 11:43
  • 1161

web前端开发中常遇到的问题

web前端开发中遇到的问题总结
  • songlf521
  • songlf521
  • 2017年02月24日 21:46
  • 1164

Java开发过程中自己遇到的各种问题汇总(连载中)

Java开发过程中自己遇到的各种问题汇总开篇:这篇文章,全权作为自己的一个问题和错误的笔记录,记录着平时开发过程中,遇到的一些问题,以及相应的解决方法,直接就直白的放在这里了,给自己忘记的时候看看,做...
  • xiaozhouchou
  • xiaozhouchou
  • 2016年11月20日 19:46
  • 609

解决网页开发过程中遇到的问题以及思路

1:js中的运算问题 js中变量的声明:如果在 var 语句中没有初始化变量,变量自动取 JavaScript值 undefined。尽管并不安全,但声明语句中忽略 var 关键字是合法的 Ja...
  • huangwwu11
  • huangwwu11
  • 2013年07月18日 16:41
  • 1691

java开发中遇到的问题及解决方法(持续更新)

工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不想动用Eclipse大家伙,只能自己动手编写脚本进行Java代码的编译和运行,期间遇到的一些问题,记录下来供自己...
  • pony12
  • pony12
  • 2014年08月09日 14:39
  • 9710

第一个java Web项目中遇到的问题(上)

前两天开始学习J2EE,没有JavaWeb的任何经验,就靠着之前学习的一点点java知识在那撑着,才照着书上码了一个小Demo,过程中却果然问题多多。。。值得庆幸的是靠着各种折腾,现在解决了部分,这些...
  • sinat_33587403
  • sinat_33587403
  • 2016年03月17日 21:42
  • 1767

在前端开发过程中遇到的问题1

1.在使用Bootstrap框架的过程中,代码没有错误但是元素样式却无法正常显示。 原因可能是导入的js文件顺序不正确。 html文件在加载和执行javaScript文件时,会按照一定的顺序来进行...
  • GY_Grace
  • GY_Grace
  • 2017年06月05日 01:53
  • 963

游戏开发中遇到的一些问题

来新公司做游戏开发已经差不多有两年的时候,期间遇到各种问题,作此纪录,以免重复犯相同的错误。   1:游戏后台采用的mysql数据库,大部分的游戏信息用blob字段表示,在blob信息里加上版本号,这...
  • tanlijun37
  • tanlijun37
  • 2013年08月09日 10:37
  • 1096

安卓开发中所遇到的一些问题及解决办法,不断更新中

Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE[字面意思:安装失败,不够贮存]
  • sz19900617
  • sz19900617
  • 2014年10月28日 13:54
  • 1281
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC+AE开发遇到的问题及其解决之道
举报原因:
原因补充:

(最多只允许输入30个字)