vc开发ArcEngine时用#import导入库后编译错误的解决
2007-05-11 11:17
513 查看
为了使用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中,这个问题出现的频率更高。
#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中,这个问题出现的频率更高。
相关文章推荐
- Eclipse开发andriod程序时import android.support.v4或者import android.support.v7提示导入错误解决办法
- Eclipse开发andriod程序时import android.support.v4或者import android.support.v7提示导入错误解决办法
- Eclipse开发andriod程序时import android.support.v4或者import android.support.v7提示导入错误解决办法
- VS2008中,VC++开发时添加自定义的消息时,发生错误的解决办法
- vc++设置为静态库后编译调试出现 map_pp.cpp Line:179 错误解决办法
- VC编译程序,运行时提示运行错误“由于应用程序的配置不正确,……”解决方法
- 导入工程的“The import android cannot be resolved”错误解决方法
- 通过Android Studio导入supportDemo,解决编译错误
- 关于VC编译错误fatal error C1083的解决办法
- 彻底解决eclipse开发安卓自动导入v7包错误问题
- 安装BCGControlBar 编译错误解决办法 fatal error C1033: cannot open program database '*:/**/vc60.idb'
- iOS开发编译时候报的错误和解决办法收集
- Android 开发环境搭建 与在编译中遇到错误make Error 45解决方法
- 导入工程的“The import android cannot be resolved”错误解决方法
- android开发,@override 编译错误的解决办法
- 用myeclipse开发的javaweb项目当导入import javax.servlet.http.HttpServletRequest; 时候老提醒错误
- android 开发 @override 编译错误 解决办法
- VC编译程序错误Error spawning的解决办法
- VC++编译错误解决方法
- Eclipse Android项目导入Android Studio时常见的编译错误及解决办法