arcengine 對 COM 元件的呼叫返回了錯誤 HRESULT E_FAIL。
問題:AE中,對 COM 元件的呼叫返回了錯誤 HRESULT E_FAIL。
ArcgisEngine二次開發中,進行地理處理,即:相交操作,交集取反操作,擦除操作等過程中,如果許可權分配不當,就會出現上面對 COM 元件的呼叫返回了錯誤 HRESULT E_FAIL 的錯誤
原因如下:在進行擦除,交集取反等高階操作時,必須是ArcgisInfo級別的許可授權,否則無法進行操作,而相交操作用ArcgisEngine級別即可。(不穩定,會出錯,建議2)
解決如下:1.如何使用licenceControl控制元件選擇ArcgisInfo選項即可,同時選中其中的Spatial Analysis 即可
2.在專案啟動main方法中新增一些程式碼
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); #region 初始化許可 IAoInitialize m_AoInitialize = new AoInitializeClass(); esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable; licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced); m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeArcScan); m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);if (licenseStatus == esriLicenseStatus.esriLicenseNotInitialized) { MessageBox.Show("沒有esriLicenseProductCodeArcInfo許可!"); Application.Exit(); } #endregion
其中的ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);是兩個方法都必須的
注意:在進行授權時,必須高許可權在前面,否則將不起作用,許可要從高到低新增,由高到低的排序為:esriLicenseProductCodeArcInfo、esriLicenseProductCodeArcEditor、esriLicenseProductCodeArcView、esriLicenseProductCodeArcServer、esriLicenseProductCodeEngineGeoDB、 esriLicenseProductCodeEngine
如果按以上方法後,出現呼叫GP分析時,不報錯“元件問題”,然而出現程式閃退,Unlicensed ARC session – terminating!,
解決方法可參考:https://www.cnblogs.com/hjyjack9563-bk/p/16305750.html