ArcObjects是ArcGIS的底层API,基于COM技术搭建,所以能够自然地支持C++,VB,.Net在内的多种语言。然而也因为是基于COM的,所以它的API很是难用(相比.Net framework那样的)。虽然我用它来开发也有些时日了,但每次用起来,总能遇到一些烦人的小问题。既然这样,那就把他们记录下来,和大家一起分享好了。
我所用的系统环境是Windows 7 64位,Visual Studio 2010和ArcGIS 9.3/10。
当然,对于使用ArcObjects的项目,都请先在项目属性中设定生成的目标平台为X86(考虑到64位的开发环境和运行环境)。
Visual Studio 2010对所有ArcObjects的引用,都缺省设定了嵌入互操作类型:True,
所以大家在我的代码中看不到组件类后面的-Class后缀。
请使用Visual Studio 2008或者更低版本的同学把-Class后缀加上。
在调用其他ArcObjects API之前,首先得初始化许可证:
using System;
using ESRI.ArcGIS.esriSystem; // ESRI.ArcGIS.System.dll
// using ESRI.ArcGIS.Version;
// 省略若干行
static void Initialize()
{
// ArcGIS10需要绑定产品代码
//RuntimeManager.Bind(ProductCode.EngineOrDesktop);
// 初始化AO许可
var aoi = new AoInitialize();
var s = aoi.Initialize(
esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
if (s == esriLicenseStatus.esriLicenseUnavailable)
throw new NotSupportedException("请求的许可不可用");
}
ArcGIS 10新加了一个RuntimeManger(包含在ESRI.ArcGIS.Version中,这个dll也是新增的),在初始化AO前必须调用它的Bind方法,绑定对应的产品。
此外,esriLicenseProductCode一般可是设成Engine,在需要访问Geodatabase的时候,得设成EngineGeoDB(当然,前提是你有那GeoDB的许可)。