天天看點

arcigis engine 開發許可初始化代碼(包括9.3,10.0和10.1)

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