C#+IDL混合开发

之前已经有很多大佬写过了,而且有很多的资料。我就简单的说一下我走过的坑吧,免得更多人掉坑里。

先说一下我的需求,手里有一份海洋卫星的HDF5数据,想要借助idl的影像处理功能,得到一幅较好的卫星影像。

材料:已备好idl处理程序(上一篇博文有介绍)

一、刚开始,想的是把idl程序,打包成exe文件,然后在程序里调用exe,传入参数,处理图像,这想法,本来完美。于是,我按照资料一步一步走,具体链接:

http://blog.sina.com.cn/s/blog_764b1e9d0102xn80.html(这个博客对于初学者有很大的帮助)

ok,生成exe之后,这一切,都没问题。直到我开始运行exe。提示我“找不到指定的ENVI模块”???????仔细查找之后才发现,还有这样一段话

emmmmmm.................

好吧,改成我自己的idl地址之后,o?果然可以。但是,当我把软件拷贝给别人时,总不能先改配置文件吧。就算是可以修改配置文件,那万一别人没有安装idl呢?不行不行。。。要不重新编写idl程序,不使用ENVI函数?可是envi函数真的很好用啊!只好另寻他法....

2、采用C# idl混合开发,调用COM_idl_connect.dll,直接调用编译过后的pro文件。虽然说这样会泄露代码,并且不具备安全性,但是。。。先试试吧

代码如下:

string yxtFullPath = "";
            try
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "请选择(L1B)影像文件";
                ofd.InitialDirectory = Config.workspace;
                ofd.Filter = "H5文件|*.h5";
                ofd.RestoreDirectory = true;
                ofd.FilterIndex = 1;

                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    yxtFullPath = ofd.FileName;
                    COM_IDL_connectLib.COM_IDL_connectClass oCOMIDL = new COM_IDL_connectLib.COM_IDL_connectClass();
                    oCOMIDL.CreateObject(0, 0, 0);

                    string varPath = yxtFullPath;
                    string workspacePath = Config.workspace;
                    string currentCommand = ".compile '" + Application.StartupPath.ToString() + @"\readH5.pro'";
                    oCOMIDL.ExecuteString(currentCommand);
                    oCOMIDL.ExecuteString("readH5,'" + varPath + "','" + workspacePath + "'");

                    MessageBox.Show("影像处理完成!");
                    OpenYXTRaster(workspacePath + @"\END_GLT.dat");
                }
            }
            catch (Exception ex)
            {
                
                throw ex;
            }

ok,调用成功,但问题又来了,图像处理成功后,会直接返回一个“对COM组件的调用返回了错误HRESULT E_FAIL”问题,

参考董彦卿老师的博客,个人并建议,先在idl程序结尾加上

 void=DIALOG_MESSAGE(!ERROR_STATE.MSG,/INFOR,TITLE='CW')

然后再调用pro文件,直接查看错误,再解决。

不管怎么说,废了半天劲,终于解决了,唉,我太笨了。。。。如有错误,希望各位指正。有需求再改吧,拜了个拜。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值