Arcengin调用GP工具“对COM组件的调用返回了错误 HRESULTE_FAIL”解决方法

本文详细解析了在项目中遇到的调用GP工具错误 对COM组件的调用返回了错误HRESULTE_FAIL 的原因及解决方法,并着重介绍了Arcengine授权机制,帮助开发者有效解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在项目里面有几处要用到调用GP工具,之前没咋用过,后来用的时候发现了很多的问题,现在记下来留给以后使用或者有问题的朋友可以看看。一般调用GP工具都是这个错误

"对 COM 组件的调用返回了错误 HRESULT E_FAIL",

出现这个错误主要的原因大致可以概括为以下:

1.参数缺少或者参数类型不正确,这是最容易解决的,改变正确的参数类型即可:

解决方法:一般我们在调用GP时都会在GIS里面先使用一遍,看看用到哪些变量,

例如 以这个 ESRI.ArcGIS.AnalysisTools.Update updateTool = new ESRI.ArcGIS.AnalysisTools.Update();叠加分析中的更新工具为例

在这个界面里面有三个必须选择的参数, updateTool.in_features = inputLayer.FeatureClass;
            updateTool.update_features = updateFeaturelayer.FeatureClass;
            updateTool.out_feature_class =this.OutputPath;

这三个参数是必须的,但是有人会问怎么判断输入的参数是对的呢,不急,在上面的红色箭头上,TOOL Help,点击就会进入

往下看,有Data Type.这就是在说明输入的类型

这就解决了参数的问题

2.参数路径不正确,或者gp的overwrite属性未设置,例如一个不存在的路径或者该路径下已有同名文件,这个问题就需要设置overwrite属性为true,(个人认为这点不是太重要,先写下了).

3.这个是最重要的,也是重点了。就是Arcengine授权的问题,自从10.1之后,在授权没了arcinfo这个授权选项了,换成了如下:

这是一个license控件,用控件讲解方便,但是我们在程序中,还是推荐用代码授权,控件会随着版本的更替不稳定。

从上到下,权限递增,但是只能选择一个,勾选上面的权限优先使用,明白了吧,就是你都选了,权限也只是上面的ArcGis Engine

针对于上面的GP工具这个权限要高点,使用advanced。

将这段代码加载你的程序InitializeComponent()方法之前就可以了,就是代码授权。

代码: ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
            IAoInitialize aoInitialize = new AoInitialize();
          esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
          licenseStatus = aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);

但是你有得的分析操作需要用到扩展功能,类似于你用arcmap的时候,某个模块需要扩展,用法就是在



 你要勾选里面的具体分析,比如你想利用GP工具实现,由点创建TIN的功能,你就要用到3DAnalystTool里面的功能,就要把这个扩展模块加进来。

aoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst)

就这样。

4.这是我在后来的工作中遇见的,加进来了,算是个比较需要细心得问题,我在做TIN转DEM的时候,ESRI.ArcGIS.Analyst3DTools.TerrainToRaster和ESRI.ArcGIS.Analyst3DTools.TinRaster,这两个GP工具非常像,里面的参数都差不多一致的,自己在做这个功能的时候搞了半天,才发现。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值