||
常见原因如下:
1、 确定编译和加载正确;
利用COM组件调用IDL代码或ENVI二次开发代码时,需要编译代码或加载(Restore)sav文件,如果编译或加载失败则后续调用会出现如下问题。
如下面代码:
错误原因:目录本应为”c:tempCallingEnvi.pro”错写为”c:empCallingEnvi.pro”,编译不成功导致后面调用CallingENVI出错。
2、 ENVI二次开发代码中时不需要ENVI_Batch_Exit
在ENVI二次开发的代码中,ENVI退出的代码为“ENVI_Batch_Exit”,如需要com调用则无需加载该语句,只需最后对com进行destroy即可,否则会导致上面的异常。
3、 调用ENVI的doit类函数
经过测试和试验,pro中调用math_doit、envi_register_doit、fx_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 |
总结:因混编作为一种比较特殊的编程方式,可以在IDL的pro中打印!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 |
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-22 20:14
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社