最近的項目開發應為客戶的系統環境不同(主要是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;
}