1. 程式人生 > 其它 >arcengine 對 COM 元件的呼叫返回了錯誤 HRESULT E_FAIL。

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