ArcGIS10.2在VS2010/VS2012/VS2013 下进行二次开发及编译出错解决

原创 2016年08月31日 15:42:36

平台:VS2010、VS2012、VS2013 + ArcGIS 10.2 + Win7 64bit


使用ArcGIS10.2结合MFC进行二次开发,编译出错。


首先配置工程,在工程上右键->属性->c/c++->常规->附加包含目录,添加如下,为本文中Engine、DeveloperKit、C:\Program Files (x86)\Common Files\ArcGIS\bin

C:\Program Files %28x86%29\Common Files\ArcGIS\bin
E:\ArcGIS\DeveloperKit10.2\include\CPPAPI
E:\ArcGIS\Engine10.2\com

配置完成如下:


在预处理器中添加:ESRI_WINDOWS,如下:

在工程文件的stdafx.h头文件中加入#include <ArcSDK.h>


注意:绑定许可和初始化许可,绑定许可是10.0之后必须的操作


在建立的MFC工程主头文件中添加AEInit()函数,如下:


主cpp文件初始化函数中添加:


代码:

bool CMFCArcGISDialog2App::AEInit()
{

#pragma region 
	IArcGISVersionPtr ipVer(__uuidof(VersionManager));
	VARIANT_BOOL succeeded;
	if (FAILED(ipVer->LoadVersion(esriArcGISEngine, L"10.2", &succeeded)))
		return false;
#pragma endregion

#pragma region 
	IAoInitializePtr ipInit(CLSID_AoInitialize);
	esriLicenseStatus status;
	ipInit->Initialize(esriLicenseProductCodeEngine, &status);
	if (status != esriLicenseCheckedOut)
		AoExit(0);
	return true;
#pragma endregion
}

	::CoInitialize(NULL);  //这句话非常重要!!!!!!
	bool Isok = AEInit();


错误一:

出现错误如下:

1>f:\wps\2016summer\arcgis\vs2010\engine\mfcapp\mfcapp\debug\esrisystemui.tlh(29): error C3121: 无法更改“IProgressDialog”类的 GUID
1>          c:\program files (x86)\microsoft sdks\windows\v7.0a\include\shlobj.h(1851) : 参见“IProgressDialog”的声明
1>f:\wps\2016summer\arcgis\vs2010\engine\mfcapp\mfcapp\debug\esrisystemui</span>.tlh(31):error C3121: 无法更改“ICommand”类的 GUID
1>          c:\program files (x86)\microsoft sdks\windows\v7.0a\include\oledb.h(6055) : 参见“ICommand”的声明
1>f:\wps\2016summer\arcgis\vs2010\engine\mfcapp\mfcapp\debug\esrisystemui</span>.tlh(200):error C2011: “IProgressDialog”:“struct”类型重定义
1>          c:\program files (x86)\microsoft sdks\windows\v7.0a\include\shlobj.h(1851) : 参见“IProgressDialog”的声明
1>f:\wps\2016summer\arcgis\vs2010\engine\mfcapp\mfcapp\debug\esrisystemui</span>.tlh(215):error C2011: “ICommand”:“struct”类型重定义
1>          c:\program files (x86)\microsoft sdks\windows\v7.0a\include\oledb.h(6055) : 参见“ICommand”的声明

原因是MFC的接口与ArcGIS之间冲突。

解决方法有两种,一种对接口重命名,另一种使用命名空间+接口名称方法。


方法一:本文ArcGIS DeveloperKit 10.2 安装路径为E:\ArcGIS\DeveloperKit10.2

在E:\ArcGIS\DeveloperKit10.2\include\CPPAPI\olb目录中找到出现报错的头文件esrisystemui.h。

修改:#import "esrisystemui.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude( "OLE_HANDLE", "OLE_COLOR", "UINT_PTR" )

为:#import "esrisystemui.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude( "OLE_HANDLE", "OLE_COLOR", "UINT_PTR" )rename("ICommand", "esriICommand") rename("IProgressDialog", "esriIProgressDialog")


切记:一定是进入安装路径修改头文件。我开始在stdafx.h中修改,无法解决问题!!!!!!


方法二:去掉no_namespace,使用命名空间调用接口

修改:#import "esrisystemui.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude( "OLE_HANDLE", "OLE_COLOR", "UINT_PTR" )

为:#import "esrisystemui.olb" raw_interfaces_only raw_native_types named_guids exclude( "OLE_HANDLE", "OLE_COLOR", "UINT_PTR" )


错误二:

1>f:\wps\2016summer\arcgis\vs2010\engine\mfcapp\mfcapp\debug\esrigeodatabase.tlh(100): error C3121: 无法更改“IRow”类的 GUID
1>          c:\program files (x86)\microsoft sdks\windows\v7.0a\include\oledb.h(12853) : 参见“IRow”的声明
1>f:\wps\2016summer\arcgis\vs2010\engine\mfcapp\mfcapp\debug\esrigeodatabase.tlh(20845): error C2011: “IRow”:“struct”类型重定义
1>          c:\program files (x86)\microsoft sdks\windows\v7.0a\include\oledb.h(12853) : 参见“IRow”的声明
1>f:\wps\2016summer\arcgis\vs2010\engine\mfcapp\mfcapp\debug\esrigeodatabase.tlh(20862): error C2011: “ICursor”:“struct”类型重定义
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\ocdb.h(620) : 参见“ICursor”的声明
1>f:\wps\2016summer\arcgis\vs2010\engine\mfcapp\mfcapp\debug\esrigeodatabase.tlh(22350): error C2504: “IRow”: 未定义基类

方法一:本文ArcGIS DeveloperKit 10.2 安装路径为E:\ArcGIS\DeveloperKit10.2

在E:\ArcGIS\DeveloperKit10.2\include\CPPAPI\olb目录中找到出现报错的头文件esrigeodatabase.h。

修改:#import "esrigeodatabase.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude( "OLE_HANDLE", "OLE_COLOR", "UINT_PTR" )

为:#import "esrigeodatabase.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude( "OLE_HANDLE", "OLE_COLOR", "UINT_PTR" )rename("IRow", "esriIRow"), rename("ICursor", "esriICursor"), rename("IRelationship", "esriIRelationship")


切记:一定是进入安装路径修改头文件。我开始在stdafx.h中修改,无法解决问题!!!!!!


方法二:去掉no_namespace,使用命名空间调用接口

修改:#import "esrigeodatabase.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude( "OLE_HANDLE", "OLE_COLOR", "UINT_PTR" )

为:#import "esrigeodatabase.olb" raw_interfaces_only raw_native_types named_guids exclude( "OLE_HANDLE", "OLE_COLOR", "UINT_PTR" )


以此类推。。。


本文在esricarto.h 中添加 rename("ITableDefinition", "esriITableDefinition")

#import "esricarto.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude( "OLE_HANDLE", "OLE_COLOR", "UINT_PTR" )rename("ITableDefinition", "esriITableDefinition")


具体使用操作请参考其他教程。。。。

结果:


谢谢观看!!!


版权声明:本文为博主原创文章,转载请注明出处。

在Visual Studio 2013中使用ArcGIS Engine 10.2 工具

安装ArcGIS Engine 10.2时,软件会提示要求需先安装VS 2010。先安装VS2010,然后安装AE10.2,在VS2013中发现AE的引用集都是可用的,在工具箱中没有ArcGIS控件,...
  • a769974782
  • a769974782
  • 2014年12月03日 15:18
  • 1844

windows8.1+ArcGIS Engine10.2+VisualStudio2013安装

身处GIS行业,ArcGis是必备武器。      所谓工欲善其事必先利其器,10.2中的ArcObject SDK for Microsoft .Net Framework只能支持VS2010和V...
  • u013509247
  • u013509247
  • 2015年03月24日 15:16
  • 6303

我的第一个MFC的ArcGIS Engine程序

(第一版,以VC++6.0+AE9.3为例) 首次,学习MFC,写个笔记,MFC还是挺好学的,废话不说,写MFC: 1.新建一个MFC工程 1)新建一个MFC AppWizard[exe],命名...
  • zzahkj
  • zzahkj
  • 2013年06月01日 11:03
  • 1433

ArcGIS Engine 10.1开发环境配置及运行

一、ArcEngine Java开发环境配置 AE Java开发环境的配置需要考虑的几方面因素:ArcGIS Engine安装环境、操作系统环境变量、JDK版本和Eclipse设置几个方面。下面分别...
  • u010068905
  • u010068905
  • 2014年01月06日 10:42
  • 3836

Arcgis Engine10.2开发常见问题及相关笔记

1,在运行时出现了ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS ...
  • giserggc
  • giserggc
  • 2015年03月27日 17:41
  • 1773

arcEngine10.2 安装在vs2013中 win7

win7 64位下只要把vs2010安装目录下\Common7\IDE\ItemTemplates\CSharp\ArcGIS文件夹和\Common7\IDE\ProjectTemplates\CSh...
  • tianhongguo
  • tianhongguo
  • 2017年09月21日 13:52
  • 389

VS2012中找不到ArcEngine10.0模板…

由于ArcGIS10.0(for .NET)默认是用VS2010作为开发工具的,所以在先安装VS2012后装ArcGIS10.0 桌面版及ArcObjects SDK for the Microsof...
  • UP19910522
  • UP19910522
  • 2013年10月22日 12:57
  • 3290

arcgis engine 10+vs2010开发环境部署

  • 2013年12月08日 20:26
  • 610KB
  • 下载

Arc GIS engine10.2与VS2012的安装及匹配步骤

Arc GIS engine与VS的安装步骤: 一、先装ArcGIS License Manager。安装license Manager10.2完成后,点击【停止】服务,装完后在bin中替换文件。 ...
  • kdhcchhnyyzy
  • kdhcchhnyyzy
  • 2015年07月01日 12:10
  • 11170

vs如何显示arcgis 二次开发工具控件

在开发项目时,想运用wpf进行arcgis窗体二次开发的,但是创建了wpf项目后发现工具控件没有显示,这是怎么回事呢? 其实这是因为工具箱中并没有加载控件,那如何添加进去呢? 其实我们可以右击...
  • ztzi321
  • ztzi321
  • 2016年06月08日 09:47
  • 1171
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ArcGIS10.2在VS2010/VS2012/VS2013 下进行二次开发及编译出错解决
举报原因:
原因补充:

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