?

.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++也有很大的提高?;贑#語言與IDL的優點,本文,筆者介紹了在C#語言中調用IDL進行應用程序開發的4種方式。

一、.NET環境與IDL簡介

1..NET環境。.NET環境是微軟公司最近推出的一個全新概念,它支持下一代Internet可編程結構。.NET是一個革命性的新平臺,它建立在開放的Internet協議之上,采用了許多新的工具和服務。簡而言之,.NET環境是1種面向網絡度支持各種用戶終端的開發平臺環境。C#語言是微軟公司于2000年7月發布的一款專門為.NET環境而開發的編程語言。作為.NET環境的通用開發語言,它能夠建造所有的.NET應用。它是一個高效、安全和靈活的現代化程序設計語言?;贑#語言上述優點,本文,筆者選擇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系統接口通信
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合