IDL程序发布及C#调用

来源:互联网 发布:淘宝真刷论坛 编辑:程序博客网 时间:2024/06/05 08:26

前一阵刚学了一下IDL相关,今天整理一下与大家分享。

前两种方式本人亲测可用,5、6也是比较好的方式。

1. idlrt.exe调用sav文件

【特点】

C#程序直接调用sav文件(间接通过idl自带的idlrt.exe)无需下一步封装。方便C#程序中传入参数。(通过ProcessStartInfo.Argument方式传入IDL程序所需参数)

 

优点:便于传入输入参数

缺点:会显示IDL虚拟机的页面

 

【调用过程】

1. 编译调试IDLpro文件

a. 新建工程将pro文件放在工程下的文件夹中

b. 检查主过程是否为程序主入口,且主过程应与文件名是否相同。

c. 调试程序pro文件是否有输入及输出(若有,则需要设定输入参数接口通过外部程序输入或文件修改提供输入值或给定输入值,设定输出路径等)

d. 判断每个程序段是否能正常运行(检查是否有其他程序段调用)。

2. 构建工程生成sav文件

a. 设置工程属性。工程构建属性下,执行RESOLV_ALL并创建sav文件输入sav路径及文件名,默认即可

b. 后续发布的可执行文件将会调用这个sav文件。如果pro程序更改则需重新编译程序并重新构建sav文件。

3. C#调用idlrt.exe

a. 打包精简版IDL库需要runtime所需文件,将其与sav文件放在C#程序目录中

b. C#程序调用,代码如下:

 

2. IDL程序发布为可执行程序

【特点】

发布后的exe文件通过启动脚本文件ini按其defaultaction命令,调用idl库中的idlrt.exe,通过该可执行程序对构建工程时生成的sav文件进行操作(注:在IDL编译器中双击sav文件即可执行pro文件。相当于对1中的C#调用过程进行封装。

 

优点C#可简单调用exe即可实现程序执行。可在没有idl的环境下运行C#程序。可在ini文件中配置启动脚本参数

缺点:如需给由pro设置传入参数接口发布的exe文件动态设置参数需用C#程序读写ini文件或利用Win32kernel32.dll组件。需要是用系统的虚拟机,程序告诉系统安装的虚拟机路径

【调用过程】

1. 同1中的编译调试pro

2. 同1中的生成sav文件

3. make_rt命令发布为可执行文件

在控制台中,按格式:make_rt,’exe文件名’,输出路径,savefile=’sav文件

回车后,在输出路径下会有一个文件夹名为所命名的exe文件名

IDL83文件夹用来作为程序运行环境,使exe执行而不用在本地安装enviIDL.ini文件为exe文件的启动脚本,可在文件中更改相关键值,其中若程序有输入参数,则可在ini文件下的defaulAction中传递参数,格式为在末尾追加【-args 参数】注意空格。此时双击exe文件即可执行程序。

4. C#中调用

通过进程启动之前发布的exe。若有输入参数并且参数需要根据C#程序动态设置,可对ini文件进行读写操作。代码如下:

 

 

3. 输出ocx可视化控件

【特点】

需要pro文件中定义Function,在通过idlexbr_assistant弹出的输出助手界面导出。

【调用过程】

1. 确保导出对象类程序能够正常运行

2. 设置IDL源码路径:a.将文件放在IDL安装路径相关目录下:如C:\IDL83\examples\doc\bridges       b.将源码路径添加到IDl路径配置下:窗口->首选项->IDL->路径,添加pro文件路径并勾选。

3. 添加编译器路径到环境变量(我的电脑属性高级环境变量系统变量的path中)

4. Idl控制台输入:idlexbr_assistant命令,启动输出助手界面。

5. 导出IDL对象类  

新建COM工程,选择pro文件,设置输出参数

6. COM组件注册

Regsvr32命令在运行中注册

7. 引用组件在.NET

添加引用-》浏览注册组件所在目录。并放到窗体上。

 

4. 输出dll组件

【特点】

Pro中为function代码,用户需要安装enviIDL作为运行环境

【调用过程】

假设pro文件为helloworldex__define.pro

1. 输出助手界面新建com工程

2. 设置输出参数

3. 发布后注册注册组件

4. 调用组件

添加dll的引用

在事件下编写

 

运行程序。

 

 

5. IDLDrawWidget组件

旧方法 Activex方式

6. COM_IDL_CONNECT

     COM组件调用

7. 封装了envi函数的IDL

IDL代码里使用了envi的函数,这时候发布出来的sav文件(或exeidlrt啥的)就不能直接运行。运行后就会弹出一个丑陋的envi界面。

不能运行是因为使用了envi的函数后,需要用envi的方式去运行。(假如的程序叫Protest

1. 先建一个文本文件,命名为protes.run,里面写上程序的名字protest

2. 打开idl编辑器把打包程序目录(包含sav文件的目录)修改成Idl工作目录或者是添加到IDL搜索路径

3. 建立一个快捷方式。在快捷方式的属性中 目标 加上一下命令

idlde路径 -minimized -noconfirmexit -nosplash @ "run文件路径"

例如:

D:/Program/envi43/IDL63/bin/bin.x86/idlde.exe -minimized -noconfirmexit -nosplash @"D:/protest/protest.run"

4. 直接拷贝envi的快捷方式,把最后envirun的文件路径改成你的run文件路径就行

直接双击快捷方式就可以直接运行你的程序。

注意:如果使用idl6.4/envi4.4 运行程序可能会遇到无法初始化envi的问题 ,提示ENVI_batch_init找不到或者没定义。那是因为编辑器本身找到到envi,把IDL根目录加到idl的搜索路径下就可以了


0 0