1. 程式人生 > >AE呼叫GP工具“對COM元件的呼叫返回了錯誤 HRESULTE_FAIL”解決

AE呼叫GP工具“對COM元件的呼叫返回了錯誤 HRESULTE_FAIL”解決

首先說下AE開發中關於gp這一塊的東西,gp是一個很方便的工具,利用gp可以在程式碼中實現ArcMap工具箱中的大部分內容,關於gp工具的使用我就不說了,這些大部分都可以在網上找到,我要說的是gp使用過程中遇到的問題:一般gp的報錯為 對 COM 元件的呼叫返回了錯誤 HRESULT E_FAIL。如下圖遇到這樣的問題的可能原因目前我所知道有三個:

1、引數缺少或者引數型別不正確,這是最容易解決的,改變正確的引數型別即可;

2、引數路徑不正確,或者gp的overwrite屬性未設定,例如一個不存在的路徑或者該路徑下已有同名檔案,這個問題就需要設定overwrite屬性為true;

3、重點來了,排除以上兩個錯誤的情況下還是出現了這種問題,很多人估計就束手無策了,我查閱了很多資料,最後發現是gp使用的某些工具必須需要足夠的許可權來執行,一般我們axlicenseconrol控制元件預設的是arcgisengine許可權

,如下圖我們在使用gp的某些功能,例如我使用的ESRI.ArcGIS.AnalysisTools.Erase這個工具,這個許可權就不夠了因此報出了上面的錯誤,那麼怎麼解決呢,很簡單,勾選許可權最大的ArcInfo(10.1以上可能對應的advanced)即可,有時候我們需要使用擴充套件模組的功能的時候可以按需勾選右邊的擴充套件,到此一般可以正常執行程式碼了,有時候可能這樣還不能解決問題,就需要用程式碼來賦予許可權相關程式碼如下:

//初始化許可

 ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine); 

IAoInitialize m_AoInitialize = new AoInitializeClass(); 

esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable; 

//licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine); 

licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced); m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);

新增相關程式碼在主窗體的建構函式的InitializeComponent();前面即可。

轉自:http://blog.sina.com.cn/s/blog_b25e55800102vtdt.html