ArcGIS Engine:对COM组件的调用返回了错误HRESULT E_FAIL

最近做一个项目,需要调用GP的【通视性】工具。该工具在ARCScene中界面如下:
在这里插入图片描述
需要两个参数(必选),即视线和障碍物,在【帮助】中查看要求参数都是FeatureLayer类型。
于是我按照GP的调用方法调用该工具,按要求传入参数(最开始传入的是要素类),报了如下错误:
在这里插入图片描述
说实话,不明不白。在网上查了很多资料,基本上可以归纳为以下几种情况:
(1)、许可级别不够。如果是拖入的许可控件,需要将权限设置为Advanced(如下图),并且左边的许可只能单选,默认许可级别是勾选的最上面那个级别(越往下许可级别越高);很多博主建议代码授权,具体怎么写可以在CSDN查,资料很多。
在这里插入图片描述
(2)、传入的参数类型不对,可以再ARCScene中打开工具,单击【工具帮助】,即可查看需要传入什么类型的参数。我的参数传入应该没有问题,后来联系ESRI客服后,那边建议不要用要素类传入,全部改成绝对路径。保险起见,我按照他们说的改了。
(3)、传入参数的绝对路径包含中文字符或特殊字符。这其实是第二个问题的扩展,多注意一下就好。
我依次检查并尝试了上述解决方案,依然无效。我想也许是报错信息不详细的原因,于是用以下代码获取了详细报错信息。
在这里插入图片描述
结果返回了如下错误(调试过几次,返回大同小异的错误):
在这里插入图片描述
在这里插入图片描述
这些错误基本上是说文件被占用了。我作为输入一个要素的shp是实时生成的,因此存在占用可能。
于是我又查找如何释放文件。有两种方法,一种是通过System.Runtime.InteropServices释放COM资源,另一种是通过ComReleaser释放Com资源。ESRI官方建议后者。这篇博客链接在这:https://blog.csdn.net/Daming113132/article/details/100173168
我按照这个方法释放,结果无效(不知道是不是我没释放干净),不过既然基本确定是文件占用,就好办了。
虽然也折磨了我很久,但后来吃饭回来灵光一现,将实时生成shp复制到另一个文件夹里,然后使用复制shp的路径,就解决了占用问题。
要代码自动实现上述步骤也简单,只需要将实时生成的shp存入一个文件夹,然后将这个文件夹所有文件拷贝到另一个文件夹中,输入要素调用拷贝文件夹的shp,就可以解决占用问题。
这个问题困扰了我很久,整个求解过程也很波折,如今总算解决了,记录一下。如果你也遇到了同样的问题,可以看看这篇博客,或许能给你一些启发。
最后,我把ESRI客服的联系电话和邮箱放在下面,专业问题还是建议咨询专业人士:
联系电话:4008192881
联系邮箱:support@geoscene.cn

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArcGIS是一款常用的地理信息系统软件,它提供了一套强大的地理空间数据处理和分析工具。在使用ArcGIS过程中,有时可能会遇到对COM组件调用返回错误HRESULT的情况。 HRESULT是一种用于标识COM组件调用结果的错误代码。它是由32位整数表示的,其中高16位表示严重性,低16位表示错误代码。当我们在使用ArcGIS时,如果遇到了HRESULT错误,需要根据返回错误代码进行具体的排查和解决。 通常,出现HRESULT错误的原因有很多种,可能是因为组件缺失、版本不匹配、权限不足等问题。要解决这类错误,我们可以采取以下几个步骤: 1. 确认组件是否存在:首先,我们需要确认所需的COM组件是否已经正确安装,如果组件缺失或损坏,就会导致调用错误。可以通过查看组件所在的目录或者使用组件注册表查找工具来确认组件的存在情况。 2. 检查组件版本:如果组件版本不匹配,也会导致HRESULT错误。在调用组件之前,我们需要确认ArcGIS版本和所使用的组件版本是否兼容。可以查看ArcGIS的官方文档或者联系技术支持来获取相关信息。 3. 检查权限设置:有时候,HRESULT错误也可能是由于权限不足引起的。我们需要确认当前用户是否具有足够的权限来访问和调用COM组件。可以尝试使用管理员权限运行ArcGIS或者修改相关权限设置来解决问题。 总之,当我们在使用ArcGIS过程中遇到对COM组件调用返回错误HRESULT时,需要逐步排查,并根据具体情况采取相应的解决措施。如果无法解决,可以向ArcGIS官方技术支持寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值