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

posted @   小鱼写代码的过往  阅读(1470)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示