VC2013 + ArcGISEngine10.0
——贵阳汉康
首先,当然是要安装好ArcObjects SDK forCross Platform C++;
安装好后,我们在VS2013里新建一个MFC的项目,比如命名为ggg,在MFC应用程序向导中,“应用程序类型”一项我们选择单文档,“生成的类”一项中,基类选择CFormView,点完成之后按照以下几个步骤:
环境配置搭建
在项目名上右击——》属性,如图1:
图1
在包含目录里添加AE的相关路径,如图2上部框里所示的三个路径。如果已经在配置文件里设置好后,那么三个路径会显示在下部红框中,此步就省略。
图2
然后在C/C++选项的预处理器中添加:ESRI_WINDOWS,如图3:
图3
这几步完了之后可以在stdfx.h中include ArcSDK.h 这个文件,编译的时候你会发现好多错错喔,不要怕怕,名称冲突而已。如图4:
图4
在AE的安装路径中找到相关的同名头文件重命名一下,我的路径是:C:\Program Files(x86)\ArcGIS\DeveloperKit10.0\include\CPPAPI\olb。比如第一个错误,原头文件是这样的:
#import "esrisystemui.olb"raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_HANDLE", "OLE_COLOR","UINT_PTR" )
错误中有两个冲突名ICommand和IProgressDialog,我们把它改为这样:
#import "esrisystemui.olb"raw_interfaces_only raw_native_types no_namespacenamed_guids exclude( "OLE_HANDLE","OLE_COLOR", "UINT_PTR" ) rename("ICommand","esriICommand") rename("IProgressDialog", "esriIProgressDialog")
现在运行调试应该是没有问题了。
接下来就做一个显示示例吧
在刚才创建的项目,在资源视图打开对话框,右键单击选择“插入ActiveX控件”,如图5,选择MapControl插件,然后添加许可绑定代码,新建一个方法,添加如下代码:
BOOL CMainFrame::InitialAE()
{
// 绑定许可
IArcGISVersionPtr ipVer(__uuidof(VersionManager));
VARIANT_BOOLsucceeded;
if (FAILED(ipVer->LoadVersion(esriArcGISEngine, L"10.0",&succeeded)))
return false;
// 初始化许可
IAoInitializePtripInit(CLSID_AoInitialize);
esriLicenseStatus status;
ipInit->Initialize(esriLicenseProductCodeEngine, &status);
if (status != esriLicenseCheckedOut)
AoExit(0);
return true;
}
在CMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct)中加入以下两句:
::CoInitialize(NULL);
BOOL isOk = InitialAE();
然后随便拖入一个按钮,单击事件如下处理:
void CgggView::OnBnClickedButton1()
{
BSTR file=SysAllocString(L"D:\\GISDataBase\\TestMap.mxd");
VARIANT pa;
pa.vt = VT_EMPTY;
VARIANT pp;
pp.bstrVal=SysAllocString(L"");
m_MapTest.LoadMxFile(file,pa,pa);
}
运行调试单击
图5