最近的项目开发应为客户的系统环境不同(主要是arcgis engine的版本不同)需要开发相应的三个版本的软件(包括9.3,10.0和10.1),arcgis engine 9.3.1以后直接升级到10.0的版本,而从这个版本开始二次开发时候的许可授权方式发生了变化(适用于后续版本),加入了新的接口IArcGISVersion,需要引用的库:
//arcgis 许可库
#import "libid:6FCCEDE0-179D-4D12-B586-58C88D26CA78" no_namespace raw_interfaces_only no_implementation rename("esriProductCode", "esriVersionProductCode")
通过定义不同的编译宏来控制编译的版本,许可初始化函数:
<pre name="code" class="cpp">BOOL InitLicense(void)
{
//初始化
#ifdef ARCENGINE93
#else //93以上版本
IArcGISVersionPtr ipVer(__uuidof(VersionManager));
VARIANT_BOOL succeeded;
#ifdef ARCENGINE10
if (FAILED(ipVer->LoadVersion(esriArcGISEngine,L"10.0",&succeeded)))
{
if (FAILED(ipVer->LoadVersion(esriArcGISDesktop,L"10.0",&succeeded)))
return FALSE;
}
#else
if (FAILED(ipVer->LoadVersion(esriArcGISEngine,L"10.1",&succeeded)))
{
if (FAILED(ipVer->LoadVersion(esriArcGISDesktop,L"10.1",&succeeded)))
return FALSE;
}
#endif
#endif
IAoInitializePtr ipInit(CLSID_AoInitialize);
esriLicenseStatus licenseStatus = esriLicenseFailure;
ipInit->IsProductCodeAvailable(esriLicenseProductCodeEngine, &licenseStatus);
if (licenseStatus == esriLicenseAvailable)
{
HRESULT hr;
hr=ipInit->Initialize(esriLicenseProductCodeEngineGeoDB, &licenseStatus);
if (!SUCCEEDED(hr))
{
MessageBox(NULL,_T("Arcgis Engine授权失败"), _T("许可提示"), MB_OK);
hr=ipInit->Initialize(esriLicenseProductCodeAdvanced, &licenseStatus);
}
return TRUE;
}
else
{
HRESULT hr;
hr=ipInit->Initialize(esriLicenseProductCodeAdvanced, &licenseStatus);
if (!SUCCEEDED(hr))
{
MessageBox(NULL,_T("ArcInfo授权失败"), _T("许可提示"), MB_OK);
hr=ipInit->Initialize(esriLicenseProductCodeStandard, &licenseStatus);
}
}
return FALSE;
}