LearningENVI&IDL分享 http://blog.sciencenet.cn/u/dongyanqing Learning ENVI&IDL

博文

“对COM组件的调用返回了错误HRESULT E_FAIL”的错误分析

已有 27820 次阅读 2011-11-2 23:46 |系统分类:科研笔记| 分析

C#ENVI/IDL进行混合编程,通常的技术为IDLDrawWidgetCOM_IDL_CONNECT,在具体调用时又经常出现“对COM组件的调用返回了错误HRESULT E_FAIL”的错误。

常见原因如下:

1、 确定编译和加载正确;

利用COM组件调用IDL代码或ENVI二次开发代码时,需要编译代码或加载(Restoresav文件,如果编译或加载失败则后续调用会出现如下问题。

如下面代码:


错误原因:目录本应为”c:tempCallingEnvi.pro”错写为”c:empCallingEnvi.pro”,编译不成功导致后面调用CallingENVI出错。

2、 ENVI二次开发代码中时不需要ENVI_Batch_Exit

ENVI二次开发的代码中,ENVI退出的代码为“ENVI_Batch_Exit”,如需要com调用则无需加载该语句,只需最后对com进行destroy即可,否则会导致上面的异常。

 3、 调用ENVIdoit类函数

经过测试和试验,pro中调用math_doitenvi_register_doitfx_doit等函数时,最后需要调用* _record函数,见下图。


如遇到该问题需要如下写法

;-

PROmath_doit_record, _extra=extra

END

 

PRO CALLINGENVI

ENVI, /restore_base_save_files

  ENVI_BATCH_INIT

  ;....

  ENVI_DOIT, 'math_doit', $

  ;....

  ;注释这一行

  ;ENVI_BATCH_EXIT

END

总结:因混编作为一种比较特殊的编程方式,可以在IDLpro中打印!ERROR_STATE.MSG查看错误原因进行分析和修正。

如调用math_doit的示例代码如下:

PRO math_doit_record, _extra=extra

END

 

PROCALLINGENVI

  COMPILE_OPT idl2

  CATCH, Error_status

  

  ;判断是否出现错误

  IF Error_status NE 0 THEN BEGIN

    Void = DIALOG_MESSAGE(!ERROR_STATE.MSG,title ='错误信息!',/error)

    CATCH, /CANCEL

    RETURN

  ENDIF

 

  ENVI, /restore_base_save_files

  ENVI_BATCH_INIT

  

  ;

  ENVI_DOIT'math_doit', $   

  ;

  

  ;....

  ;

  ;ENVI_BATCH_EXIT

  void = DIALOG_MESSAGE(!ERROR_STATE.MSG,/infor,title='错误原因')

END




https://blog.sciencenet.cn/blog-344887-503969.html

上一篇:数组下标转换一维坐标索引函数:array_indices_reverse
下一篇:IDL下同时显示不同分辨率图像的方式
收藏 IP: 121.18.127.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 14:17

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部