C#与ENVI/IDL进行编程常见错误 调用AE组件时常出现这样的问题
报错:
无法嵌入互操作类型"ESRI.ArcGIS.Carto.MapDocumentClass".请改用适用的接口.
解决方案如下:
解决方案——项目——引用——ESRI.ArcGIS.Carto
右键ESRI.ArcGIS.Carto ——属性——嵌入互操作类型=false
一.进行纯IDL技术开发
代码编写与操作时需要注意的几点:
1、pro第一行写上compile_opt idl2,避免编译时ENVI函数找不到的情形;
2、调试时需要终止程序,尽量不要点击“终止”按钮(Ctrl+F2),点击编译即可;
3、如已经点击了“终止”按钮,需要重置IDL进程,即命令行输入.reset_session或.f;
4、菜单“窗口”-“首选项”-“IDL”-“路径”下要确保存在<IDL_default>,尽量不要添加其他路径;
5、ENVI的菜单File-Perference下,Miscellaneous面板下,将Exit IDL on Exit from ENVI修改为No,避免envi_Batch_Exit执行时IDL退出;
附参考模版:
pro test_envi_Batch
compile_opt IDL2
envi,/restore_base_save_files
envi_Batch_init
envi_open_file,envi_pickfile(),r_fid=fid
tmp = dialog_Message('file ID:'+StrTrim(fid,2),/Infor)
envi_Batch_exit
end
二。bs架构的开发应注意
在envi for arcgis server开发中,IDL源程序中应当注意:
三.进行组件式开发应当注意
C#与ENVI/IDL进行混合编程,通常的技术为IDLDrawWidget和COM_IDL_CONNECT,在具体调用时又经常出现“对COM组件的调用返回了错误HRESULT E_FAIL”的错误。
以COM_IDL_CONNCET为例,对常见错误进行分析。
1、 确定编译和加载正确;
利用COM组件调用IDL代码或ENVI二次开发代码时,需要编译代码或加载(Restore)sav文件,如果编译或加载失败则后续调用会出现如下问题。
如下面代码:
错误原因:目录本应为”c:\temp\CallingEnvi.pro”错写为”c:\emp\CallingEnvi.pro”,编译不成功导致后面调用CallingENVI出错。
2、 ENVI二次开发代码中时不需要ENVI_Batch_Exit
在ENVI二次开发的代码中,ENVI退出的代码为“ENVI_Batch_Exit”,如需要com调用则无需加载该语句,只需最后对com进
行destroy即可,否则会导致上面的异常。