.NET环境下C#与IDL集成开发方法研究

2012-10-26 07:42郑州铁路职业技术学院软件学院李海胜朱纹玉
河南科技 2012年3期
关键词:编程语言调用应用程序

郑州铁路职业技术学院 软件学院 李海胜 朱纹玉

.NET环境下C#与IDL集成开发方法研究

郑州铁路职业技术学院 软件学院 李海胜 朱纹玉

目前,应用程序开发商有着众多的编程语言可供选择。这些编程语言面向不同的应用,并拥有不同的特点。综合不同编程语言的特点,实现高效的应用程序开发是现代软件开发的一个重要方向。C#是微软公司为.NET环境精心设计并开发的下一代编程语言,它具有支持快速开发,面向对象和组件等诸多优点。C#语言可以很方便地利用Windows的系统资源以及.NET平台提供的大量基础类库,通过C#能够在.NET环境上快速开发出种类丰富的应用程序。C#语言与IDL(接口描过语言)的集成开发可以方便快捷地开发出功能强大的各种应用程序。IDL是集科学数据分析可视化表达与跨平台应用开发等功能为一体的第4代可视化编程语言。它面向矩阵,可以对数组直接进行操作,具有快速分析超大规模数据库的能力,速度相比C、C++也有很大的提高。基于C#语言与IDL的优点,本文,笔者介绍了在C#语言中调用IDL进行应用程序开发的4种方式。

一、.NET环境与IDL简介

1..NET环境。.NET环境是微软公司最近推出的一个全新概念,它支持下一代Internet可编程结构。.NET是一个革命性的新平台,它建立在开放的Internet协议之上,采用了许多新的工具和服务。简而言之,.NET环境是1种面向网络度支持各种用户终端的开发平台环境。C#语言是微软公司于2000年7月发布的一款专门为.NET环境而开发的编程语言。作为.NET环境的通用开发语言,它能够建造所有的.NET应用。它是一个高效、安全和灵活的现代化程序设计语言。基于C#语言上述优点,本文,笔者选择C#语言作为.NET的开发语言。.NET环境采用统一的集成开发环境Visual Studio,本文,笔者的开发环境即为Visual Studio2005。在进行.NET应用程序开发时,可以方便地引用他人提供的外部程序集。从而,可以方便地实现程序的调用。

2.IDL。IDL是美国ITT公司推出的一种可视化语言,它具有较强的数据分析和可视化能力。在IDL语言中往往只需要几条语句就能执行大量、复杂的数据处理或者实现二维、三维图形的绘制,而这在其他语言中需要上百条语句才能实现。通过IDL链接外部程序、或者将IDL作为其他语言的外部程序或图形引擎,IDL可以成为现有开发工具强有力的补充。在应用程序开发中实现IDL与其他语言的相互调用,使得语言之间可以得到优势互补,从而大大加快程序的开发进程。此外,IDL还可以方便地调用ENVI函数,实现复杂的图像处理功能,大大节省了系统的开发时间。

二、在C#语言中调用IDL的方法

1.图形显示模式。IDLDrawWidget(只用于Windows平台)是IDL提供的可被嵌套在任何ActiveX语言控件的程序。IDLDrawWidget提供了其他语言调用IDL语言的机制。.NET环境支持新的组件标准Assembly,Assembly兼容ActiveX的机制,可以通过封装ActiveX来实现。基于这种机制,就使得在.NET环境中集成IDL成为可能。在这里,需要注意的是,IDLDrawWidget在IDL6.4以后的版本中已经被ITT公司所放弃,并不再更新,所以一些新的IDL功能在IDLDrawWidget将无法调用。调用的方法:首先,在应用程序添加IDLDrawWidget。其次,初始化IDLDrawWidget。最后,通过IDLDrawWidget调用IDL。具体程序如下:

IDLdw.IdlPath="C∶\ITT\IDL71\bin\bin.x86";

int n=IDLdw.InitIDL((int)Handle);

if(n==0)return;IDLdw.Retain=2;

IDLdw.GraphicsLevel=2;

int drawWidget=IDLdw.CreateDrawWidget();

if(drawWidget<0) return;

IDLdw.SetOutputWnd((int)logInfoText.Handle);

在IDLDrawWidget控件初始化完毕后,就可以利用ExecuteStr方法来执行IDL命令了。IDL命令可以是IDL语句也可以是IDL代码文件或者是已经编译好的.SAV文件。具体程序如下:

IDL dw.Execute Str(".Compile T1.pro");

IDLdw.ExecuteStr("T1");

IDLdw.ExecuteStr("restore,T1.sav");

IDL与C#之间的数据通信是系统开发的关键。IDLDrawWidget提供了IDL与外部应用环境之间的数据传输机制,使得IDL与外部程序之间的数据传输变得十分简单。IDLDrawWidget与C#数据传递方式如下所示:首先,通过SetNamedData在C#下进行IDL中变量的创建。GetNamedData在C#下进行IDL变量读取的具体程序如下:

int v1=100;

IDLdw.SetNamedData("v1",v1.ToString());

string v2=(string)IDLdw.GetNamedData("v1");

其次,通过SetNamedArray在C#语言中进行IDL中变量数组的创建,通过CopyNamedArray在C#语言进行IDL中变量数组的读取。具体程序如下所示:

int a1={1,2};

IDLdw.SetNamedArray("a1",a1,true);

int a2=(int)IDLdw.CopyNamedArray("a1");

最后,使用ExecuteStr方法执行命令行,同时传递数据。具体程序如下:

int v1=100;

IDLdw.SetNamedData("v1",v1);

IDLdw.ExecuteStr(".compile SNF.pro");

IDLdw.ExecuteStr("total=sumNumFun(v1=v1)");

int dd=(int)IDLdw.GetNamedData("total");

在.NET环境中,IDLDrawWidget通过“自动事件”属性独占IDLDrawWidget所产生的事件。此时,C#语言无法获取IDLDrawWidget上所产生的事件。IDLDrawWidget的“自动事件”属性包括OnInit、OnExpose、OnButtonPress等内容。若需IDLDrawWidget响应事件时,需指定“自动事件”属性的IDL过程或函数。若需要C#语言对事件做出响应,可通过设置IDLDrawWidget的RegisterForEvents方法来屏蔽IDLDrawWidget的“自动事件”属性,IDLDrawWidget便可在其控件区域响应.NET的标准事件,如Mouse Up、Mouse Down和Mouse Move等件。

2.功能调用模式。若系统开发无需IDLDrawWidget程序提供的可视化窗口,C#语言可直接使用IDL提供的COM组件IDLDRAW3Lib来调用IDL。COM组件是微软公司为了计算机工业的软件生产更加符合人类行为方式而开发的一种软件开发技术。在COM组件下,人们可以开发出各种各样且功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。IDLDRAW3Lib组件的用法与图形显示模式基本相同:首先,在应用程序中添加IDLDRAW3Lib组件。其次,初始化IDLDRAW3Lib组件。最后,通过IDLDRAW3Lib组件调用IDL功能。IDLDRAW3Lib组件的数据传递方式与IDLDrawWidget程序的传递方法相同,在此就不再赘述了。

3.COM_IDL_Connect组件。COM_IDL_Connect组件是IDL提供的另一种COM组件。COM_IDL_Connect组件提供了对ENVI/IDL现有功能调用的支持。COM_IDL_Connect组件的数据传递方式与IDLDRAW3Lib的数据传递方式相似。COM_IDL_Connect组件的用法亦与IDLDRAW3Lib的图形显示模式相同。首先,在应用程序中添加COM_IDL_Connect组件。其次,初始化COM_IDL_Connect组件。最后,通过COM_IDL_Connect组件调用IDL功能。

4.输出COM组件。IDL是1个COM组件,利用COM技术可以将IDL图形功能嵌入到C#、VB、VC等编写的Window程序中。借助IDL的对象输出向导功能可以在其他软件程序中很容易地使用IDL的可视化和分析功能,且无需进行跨平台整合所需的编程工作。IDL对象输出向导可输出对象、方法和参数,然后自动包装指定的IDL对象,它可以很容易地将其导入到本地COM客户端应用程序,缩短了接口开发的时间。使用IDL输出向导导出COM的步骤如下:

(1)定义IDL对象并将类定义文件的路径添加到IDL路径中。

(2)将C#语言编译器路径添加到电脑环境变量path中。

(3)将类定义文件加载到输出向导中,并选择工程类型为“输出COM”。

(4)设置输出对象的参数、过程与函数。

(5)编译输出对象。

(6)生成*.DLL和*.TLB文件。

(7)在CMD环境中使用regsvr32对*.DLL文件进行注册。

.DLL文件的用法与COM_IDL_Connect组件相似。首先,在应用程序中添加已输出的COM组件。其次,初始化COM组件。最后,通过COM组件调用IDL。具体程序如下所示:

sumnumsClassplusNum=new sumnumsClass();

plusNum.CreateObject(0,0,0);

float total=plusNum.FuncADD(33,56);

三、方法比较

图形显示模式和功能调用模式形象直观,调用过程简单,方便程序调试。而输出COM组件模式则需编写IDL对象,打包输出COM组件,并在.NET环境下调用COM组件。在.NET环境下调用COM出错时,需不断重复上述整个过程从而导致程序调试过程繁琐,提高了程序的开发难度。图形显示模式与输出COM组件模式可以在.NET环境下创建IDL的DRAW显示组件,在实现可视化的同时也提供了ENVI/IDL的功能调用。但功能调用模式只提供了ENVI/IDL的功能调用,并未提供可视化组件的调用。

四、系统应用

本文,笔者采用IDLdrawWidget程序来实现图像3D显示、波谱曲线浏览建库、蚀变矿物信息提取等功能,快速地完成了ImageInfor系统的开发工作。ImageInfor程序主界面如图1所示。

本文,笔者总结介绍了.NET环境下C#语言与IDL相结合的4种开发方式。这些开发方式综合了C#与IDL的优点。C#语言支持快速开发,其GUI(图形用户界面)设计方便且IDL数据分析功能强大。此外,IDL借助ENVI的二次开发函数库可以实现更为强大的图像处理功能。综合利用编程语言的这些优点,实现不同语言的集成开发在一定程度上加快了应用程序的开发速度,但是集成开发需要编程人员对不同语言都要具有一定深度的理解,这使得集成开发具有较大的技术难度。

猜你喜欢
编程语言调用应用程序
压力-体积转换在CFC编程语言中的实现解析
核电项目物项调用管理的应用研究
Java编程语言的特点与应用
删除Win10中自带的应用程序
LabWindows/CVI下基于ActiveX技术的Excel调用
谷歌禁止加密货币应用程序
浅谈不同编程语言对计算机软件开发的影响
基于系统调用的恶意软件检测技术研究
面向对象Web开发编程语言的的评估方法
利用RFC技术实现SAP系统接口通信