陈兴峰
IDL+ENVI和C#联调的注意问题
2018-10-12 09:58
阅读:5798

 基于ENVI5.3+IDL8.5开发了pro程序,可以在c#中调用的方式主要有以下:

1、c#直接运行pro

方法有IDLDrawWidgetCOM_IDL_CONNECT两个组件可用,可以参考http://blog.sciencenet.cn/blog-344887-518195.html。

经常会遇到“对COM组件的调用返回了错误HRESULT E_FAIL”等错误。需要注意的问题是

(1)C#工程配置和IDL的32bit和64bit要一致

(2)dll要经过cmd运行regsvr32 *.dll来注册成功

(3),在c#中引用-控件属性要嵌入互动选false

(4)idl代码pro第一句要有  COMPILE_OPT IDL2

(5)ENVI二次开发代码中时不需要ENVI_Batch_Exit(结尾)

(6)pro中调用math_doit、envi_register_doit、fx_doit等函数时,最后需要调用* _record,在主pro之前加上:

pro resize_doit_record, _extra=extra

END

pro ENVI_MASK_DOIT_record, _extra=extra

END

pro ENVI_MASK_APPLY_DOIT_record, _extra=extra

END

pro envi_register_doit_record, _extra=extra

END

2、编译成sav文件来运行

高版本的如果是建立同名工程来生成sav文件(建议采用该方法),需要在工程属性中勾选相应设置,如下图

image.png

使用命令行编译和生成,需要注意:

(1)编译的设置

可以参考http://blog.sina.com.cn/s/blog_764b1e9d0102xw9p.html

编译sav文件的操作顺序和命令很重要,一定逐步完成。

 

第一步:重置IDL进程

可单击IDL工具栏中的"重置"按钮,也可在IDL控制台中输入 .f 然后回车。

 

第二步:编译pro文件

如果pro文件个数较少时,逐个手动编译即可。

如果文件个数较多,建议以工程方式构建项目,一步即可构建sav文件。

 

第三步:加载pro调用的函数

在IDL控制台执行如下命令即可:

resolve_all, skip_routines='envi', /continue_on_error

 

第四步:构建sav文件

在IDL控制台执行如下命令:

save,filename='D:\temp\test_ENVITask_Args.sav',/routines

注:filename指定为sav文件输出路径,sav文件名必须与pro主过程同名。

(2)pro文件的编译预设

如果envi二次开发使用了早期版本的函数,在idl和envi同时打开时,编译是没问题的,但按照上述步骤重置idl时,会关闭envi,编译时无法通过。

原因可以参考http://blog.sina.com.cn/s/blog_87a1a0090102ws9p.html

解决方案就是在主pro之前声明一下:

Forward_function ENVI_PROJ_CREATE, ENVI_CREATE_ROI

如此,仅通过idl开发环境就可以编译成功,然后生成sav。

3、C#调用idlrt.exe来运行envi二次开发程序

相当于c#调用一个控制台命令。

首先要制作好双击即可运行的sav文件,也可以制作成exe(envi+idl的exe实际上也是调用sav,终点需要关注ini文件)

可以参考http://blog.sina.com.cn/s/blog_764b1e9d010164ym.html

对于参数传递问题,(1)如果是几个变量,用idlrt命令传递的时候加入-args就可以了,(2)也可以在固定的文件夹放置一个txt,在pro里写好读取命令,sav运行后自动去获取txt中中准备好的传递参数,(3)如果较大的数据,那就以文件的形式,仅用前面两种方法传递文件路径就可以了。

运行sav的idlrt.exe命令参考如下,在cmd中直接运行即可:

"C:\Program Files\Exelis\IDL85\bin\bin.x86_64\idlrt.exe" "C:\Users\mimi\IDLWorkspace\geoangle\GEOANGLE.SAV" -args "C:\Users\mimi\Desktop\*.MOD021KM.hdf"


转载本文请联系原作者获取授权,同时请注明本文来自陈兴峰科学网博客。

链接地址:https://wap.sciencenet.cn/blog-474887-1140400.html?mobile=1

收藏

分享到:

当前推荐数:1
推荐人:
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?