为了使用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中,这个问题出现的频率更高。
分享到:
相关推荐
用vc开发ArcEngine建立框架程序 GIS二次开发
用VC开发ArcEngine的框架代码。
基于ArcEngine和VC#结合的AE二次开发,包括基本文件夹在于显示,空间分析功能的实现等。
VC6.0+Arcengine9.0开发应用程序框架制作
vc+ArcEngine建立框架程序:制作浮动可变大小的控制窗口,可以实现图层拖放-vc+ ArcEngine procedures for the establishment of the framework: the production of a floating variable to control the size of the ...
用VC及ArcEngine开发的实现缓冲区分析功能的代码
在VC中有很多编译环境语句让人很头疼,在这里本人对 VC中#import的用法进行了详细解析
基于VC#和AE(ARCENGINE)开发了一个综合地理信息系统,其可实现多种数据格式的显示,可实现地图符号化,坐标转化,数据库的创建与数据入库,三维场景,三维分析,数据多种查询等等。
ArcEngine与VB、C#、VC的开发
本文是使用VC_开发的基于ArcEngine的3维管线距离分析组件,很具有参考价值!
蛮好的开发资料 二、ArcEngine+ VC.NET 2005开发
自制工具用于解决通过def文件制作的导入库无法从dll导入不带@nn后缀的stdcall函数的问题。需要.net framework 2.0才能运行。
基于ArcGISEngine和VC8.0实现的鹰眼功能的过程和详细代码
VC++编译中常见的编译错误,对于初学者来说很有用处哦~
winpcap 4.1.1在vc6下编译会出现以下错误,原因是vc6.0并不完美支持c++99标准,在64位cpu中编译会有问题, 将winpcap开发包换到4.0.1版本及以下错误消失 c:\wpdpack\include\pcap-stdinc.h(79) : error C2144: ...
vc,C#,Arcengine SQL属性查询,select,from ,where
ArcEngin帮助文档中VC的例子很少,这是自己写的IDW插值,已经用在自己项目中
VC常见错误集锦VC常见错误集锦VC常见错误集锦VC常见错误集锦VC常见错误集锦
vc2010编译的ssh.lib静态库