IDL调用程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

准备工作。你需要安装Visual C++,注意要保证设置cl编译器的环境变量,一个简单的检验方法是在MS-Dos中键入cl命令,看是否正常运行。打开IDL,在命令行中输入

IDL> help,!make_dll,/structure

我们可以得到:

** Structure !MAKE_DLL, 4 tags, length=48, data length=48:

COMPILE_DIRECTORY

STRING 'C:\Documents and Settings\Dave\.idl\rsi\compile_dir-118-idl_6_2-win32-x86-m32-f64'

COMPILER_NAME STRING 'Microsoft Visual C++ 7.0'

CC STRING 'cl %X -D_DLL -DMSWIN -DWIN32 -D_MT /nologo /I"D:\RSI\IDL62\external\include" /c %C /Fo%O'

LD STRING 'link /out:%L /nologo /nodefaultlib /dll %O /def:%E "D:\RSI\IDL62\bin\bin.x86\idl32.lib" msvcrt.lib kernel32.lib %X'

IDL中的make_dll命令就是利用!make_dll系统变量中的参数来编译c语言文件的。COMPILE_DIRECTORY表示编译生成文件存放的地方,COMPILER_NAME是编译器名称,CC和LD分别是编译命令和编译选项。这是个参数是系统默认值,都可以通过make_dll 命令的参数改变。

2. 编写C语言文件,我们选用安装目录下external\call_external\C中的sum_array.c作为例子,如下

#include

#include "idl_export.h"

float sum_array_natural(float *fp, IDL_LONG n)

{

float s = 0.0;

while (n--) s += *fp++;

return(s);

}

float sum_array(int argc, void *argv[])

{

return sum_array_natural((float *) argv[0], (IDL_LONG) argv[1]);

}

为了方便,我们把sum_array.c放入COMPILE_DIRECTORY目录中。

从程序中我们注意到:

a) 需要包含头文件idl_export.h,该文件的目录已经在CC参数中设置,/I"D:\RSI\IDL62\external\include";

b) 定义一个适用于IDL调用的函数float sum_array(int argc, void *argv[]),该函数的参数必须是int argc和void *argv[]。该函数以后要被CALL_EXTERNAL调用,通用的形式是return_type example(int argc; void *argv[]);

c) 在sum_array函数中调用自己设计的函数sum_array_natural,有两个参数通过指针数

组argv[]传递,argv[0]是数组的指针,argv[1]是长整型变量,关于参数的传递可参考帮助;

3. 利用make_dll命令编译sum_array.c文件,

IDL> make_dll,'sum_array','sum_array_examples',['sum_array_natural','sum_array']

这时在COMPILE_DIRECTORY目录中生成sum_array_examples.dll文件。这里'sum_array'是需要编译的c语言文件名,省略扩展名。'sum_array_examples'为生成dll文件的名称,['sum_array_natural','sum_array']是需要输出的函数。

4. 下面我们就可以利用CALL_EXTERNAL命令来调用sum_array_examples.dll中的函数了,例如

IDL> arr_l=FINDGEN(10)

IDL> result = CALL_EXTERNAL('C:\Documents and Settings\Dave\.idl\rsi\compile_dir-118-idl_6_2-win32-x86-m32-f64\call_external_example s.dll','sum_array',arr_l, n_elements(arr_l),VALUE=[0,1], /F_VALUE, /CDECL)

IDL> print,result

得到

45.0000

上面CALL_EXTERNAL的参数:

a) 'C:\Documents and Settings\Dave\.idl\rsi\compile_dir-118-idl_6_2-win32-x86-m32-f64\call_external_example s.dll'是call_external_examples.dll文件的目录

b) 'sum_array'是需要调用call_external_examples.dll里面的函数;

c) Value选项定义参数传递的方式,指针传递用0表示,非0表示值传递;

d) /F_VALUE表示函数返回float类型变量;

e) /CDECL定义call_external_examples.dll文件传递参数的方式,适用于C语言,详细参考dll文件的生成。

IDL 6.4如何生成调用了envi函数的独立运行程序呢

我把论坛里的帖子都看了一遍,大伙都用IDL7.0了。可我用的是envi 4.4,

所以IDL还是6.4 版。我遇到的问题是,我写了个小程序,调用了envi 函数,

如何在IDL6.4中生成独立运行的程序呢。是否必须安装envi呢?

收藏分享评分

回复引用

订阅 TOP

有两种方法:

一、模仿ENVI+IDL的运行方式。

1、先建一个文本文件,命名为

protes.run,里面写上程

2#

发表于

相关文档
最新文档