《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > IDL與VC信息相互傳遞的實現(xiàn)方法
IDL與VC信息相互傳遞的實現(xiàn)方法
2015年微型機與應用第2期
米云博,熊顯名,王 永
(桂林電子科技大學 電子工程與自動化學院,廣西 桂林 541004)
摘要: 為了準確傳遞和保存IDL可視化數(shù)據(jù)信息,實現(xiàn)語言之間的互通性、資源共享性、數(shù)據(jù)信息的多樣性、調(diào)用格式的不同性,基于解析函數(shù)調(diào)用的方法,運用動態(tài)鏈接庫和一系列的子類函數(shù)獲取數(shù)據(jù),使IDL與VC之間相互轉(zhuǎn)換信息,可通過VC直接對遙感影像進行處理,為應用系統(tǒng)的研發(fā)提供了一種新方法。試驗實例證明,該方法能簡單有效地將IDL與VC有機地結(jié)合在一起,實現(xiàn)了信息相互傳遞,并通過C直接對遙感影像進行操作處理。
Abstract:
Key words :

  摘  要: 為了準確傳遞和保存IDL可視化數(shù)據(jù)信息,實現(xiàn)語言之間的互通性、資源共享性、數(shù)據(jù)信息的多樣性、調(diào)用格式的不同性,基于解析函數(shù)調(diào)用的方法,運用動態(tài)鏈接庫和一系列的子類函數(shù)獲取數(shù)據(jù),使IDL與VC之間相互轉(zhuǎn)換信息,可通過VC直接對遙感影像進行處理,為應用系統(tǒng)的研發(fā)提供了一種新方法。試驗實例證明,該方法能簡單有效地將IDL與VC有機地結(jié)合在一起,實現(xiàn)了信息相互傳遞,并通過C直接對遙感影像進行操作處理。

  關鍵詞交互式語言;高級語言VC;信息傳遞;解析函數(shù)調(diào)用

0 引言

  隨著遙感技術的不斷發(fā)展,交互式語言(IDL)成為人們關注的重要語言[1],在眾多行業(yè)廣泛應用。由于大部分軟件和通信保存格式都是用高級語言C來編寫的,因此,將IDL和C語言有機地結(jié)合在一起,且不需要改寫原有的程序就能將遙感信息數(shù)據(jù)傳遞并保存,成為當前遙感領域急需解決的問題之一。C語言具有通用性、可擴展性、廣泛性強的特點[2],因此應用最為廣泛。目前,IDL與C語言的結(jié)合還比較少,各個國家都開展了IDL與C語言接口信息傳遞的研究,而中國在這方面還處在探討階段。因此,如何將IDL有效信息通過C語言傳遞并保存成為目前遙感領域以及高級語言領域里一個值得研究的方向。本文提出了一種函數(shù)調(diào)用方法,有效地實現(xiàn)了信息在IDL與C語言之間的傳遞。

1 開發(fā)語言的使用

  IDL是一種數(shù)據(jù)可視化面向矩陣的第4代交互式計算機語言,是集成可視化、大型商業(yè)開發(fā)、交互式分析為一體的高級開發(fā)環(huán)境[1]。IDL主要面向?qū)ο鬄榭梢暬瘮?shù)據(jù)分析,它的語法結(jié)構(gòu)簡單、功能強大、編程效率高,簡單的編程實現(xiàn)復雜的圖像分析,是跨平臺應用開發(fā)的最佳選擇,它提供的圖像類能夠快速地對圖像進行分析,可與OpenGL相媲美,因此被廣泛地應用在遙感領域中[3]。

  IDL支持各種操作系統(tǒng)平臺,具有很好的移植性,為與VC相結(jié)合提供了基礎。VC是微軟推出的運行非常穩(wěn)定、非常有影響力的專業(yè)級程序設計與數(shù)據(jù)處理語言。將IDL與VC有機地結(jié)合在一起,發(fā)揮各自優(yōu)點,以實現(xiàn)資源共享,使IDL的信息具有廣泛性和通用性。

2 解析函數(shù)調(diào)用方法

  IDL為了擴充編程和數(shù)據(jù)處理能力,提供了應用程序接口(API)技術。利用API技術可方便地實現(xiàn)在IDL中調(diào)用VC的可執(zhí)行文件、函數(shù)和程序。數(shù)據(jù)傳遞總體框圖如圖1所示。

001.jpg

  2.1 IDL調(diào)用VC

  在IDL中調(diào)用VC可以使用3種方法:SPAWN方法、LINKIMAGE方法和CALL-EXTERNAL方法。利用SPAWN方法可以直接調(diào)用VC的可執(zhí)行文件,但是執(zhí)行調(diào)用不帶參數(shù)的SPAWN命令時,將調(diào)用Windows的DOS Shell命令窗口,使用時需要轉(zhuǎn)換。LINKIMAGE方法是通過系統(tǒng)所支持的動態(tài)鏈接接口完成程序調(diào)用任務,但使用此方法,開發(fā)者需要有豐富的IDL內(nèi)部知識,該方法不適合一般的開發(fā)者使用。利用CALL-EXTERNAL方法能夠在IDL調(diào)用VC中精準地匹配數(shù)據(jù)結(jié)構(gòu),對于非結(jié)構(gòu)數(shù)據(jù)的傳輸,不需要調(diào)用其他命令窗口,具有LINKIMAGE方法的優(yōu)點,但不需要開發(fā)者對IDL內(nèi)部特別熟悉,因此本文選用CALL-EXTERNAL方法來調(diào)用VC程序[4]。

  IDL程序能在運行時動態(tài)調(diào)用VC程序,通過CALL-EXTERNAL接口函數(shù)裝入共享目標庫實現(xiàn)函數(shù)調(diào)用,在Windows平臺上,IDL通過動態(tài)鏈接庫技術來實現(xiàn),能夠方便地實現(xiàn)模塊化[5]。IDL調(diào)用動態(tài)鏈接庫遵循C語言中函數(shù)調(diào)用協(xié)議。任何的動態(tài)庫調(diào)用原型都被定義成return-type()形式,返回值必須是CALL-EXTERNAL函數(shù)支持的數(shù)據(jù)類型。其中所有的參數(shù)都能以“傳值”或“引用”方式進行傳遞。程序編寫流程圖如圖2所示。

003.jpg

  根據(jù)流程圖編寫程序。調(diào)用VC輸入數(shù)據(jù)最終顯示結(jié)果如圖3所示??梢钥闯?,該方法編寫的程序能夠很好地調(diào)用VC輸入的數(shù)據(jù),從而表明此方法的正確性、可行性。

  2.2 VC調(diào)用IDL

  利用IDL的API,可以實現(xiàn)VC調(diào)用IDL的命令、函數(shù)和數(shù)據(jù)。調(diào)用IDL的技術在操作系統(tǒng)中都會調(diào)用IDL的驅(qū)動程序,而驅(qū)動程序會存在于IDL動態(tài)鏈接庫中[6],調(diào)用時主要的3個環(huán)節(jié)如下。

 ?。?)初始化IDL。在調(diào)用IDL之前要對IDL進行初始化,使用IDL_Win32Init()函數(shù)來對IDL進行初始化,使用方法為:

  int IDL_Win32Init()(int abc,void*hst,void*use,void*null);

  其中,abc取值為0保留參數(shù),后面兩個參數(shù)都是句柄,null也是一個保留參數(shù)取值為NULL的數(shù),當初始化成功返回值為“TURE”。

 ?。?)VC應用程序中輸出在同一個邏輯窗口,當IDL被調(diào)用時,默認的輸出函數(shù)會被IDL所覆蓋,需要通過IDL_ToutPush和IDL_ToutPop來轉(zhuǎn)移IDL的輸出結(jié)果到指定的函數(shù)中。IDL中提供了IDL_Execute()和IDL_ExecuteStr()兩個函數(shù),用于在其他語言中調(diào)用IDL語句,調(diào)用具體形式為;

  int IDL_Execute(int argc,char*nrcv[]);

  int IDL_Execute(char*comd);

  (3)在調(diào)用完IDL語句之后主函數(shù)執(zhí)行完之前,需要通過函數(shù)IDL_Cleaup來關閉IDL。調(diào)用方法為:

  int IDL_Cleaup(int just cleanup);

  根據(jù)IDL的調(diào)用方法在VC6.0的編譯環(huán)境下,通過動態(tài)鏈接庫實現(xiàn)一個能調(diào)用IDL的VC程序,程序編寫流程圖如圖4所示。

004.jpg

  根據(jù)流程圖編寫程序具體實現(xiàn)VC調(diào)用IDL,VC程序調(diào)用“IDL輸入”的結(jié)果,在IDL編輯對話框輸入編輯內(nèi)容,在VC編輯窗口點擊接收按鈕將“IDL輸入”數(shù)據(jù)顯示在VC編輯對話框的顯示框內(nèi),顯示結(jié)果如圖5所示。

005.jpg

3 實驗

  根據(jù)上述方法可知,IDL與VC之間可以通過動態(tài)鏈接庫相互之間傳遞數(shù)據(jù),由于IDL主要是GUI界面,大部分是對圖像進行處理,因此對圖像數(shù)據(jù)信息的傳遞尤為重要。根據(jù)上述方法進行程序的編寫,使VC能夠接收IDL圖像并以VC的保存格式來保存IDL的數(shù)據(jù)信息,并直接對圖像處理,再將處理結(jié)果直接傳遞給IDL。本文利用IDL編寫的水深反演軟件將處理的圖像信息按照上述方法傳輸給VC程序,利用VC來顯示IDL處理圖像的結(jié)果,如圖6和圖7所示。

006.jpg

  根據(jù)圖像顯示結(jié)果可知,IDL和VC可以相互轉(zhuǎn)換數(shù)據(jù),也可以將數(shù)據(jù)以它們各自的形式進行保存,從而說明IDL和VC可以很好地結(jié)合在一起,信息可以相互傳遞實現(xiàn)資源共享。

4 結(jié)論

  本文介紹了將IDL和VC相互結(jié)合的方法,讓它們體現(xiàn)各自的特點,詳細描述了實現(xiàn)方法,并用實際例子來證明了本文方法的可行性和正確性。本文方法為IDL和VC混合開發(fā)軟件提供了參考基礎,也為兩種語言的應用研究開發(fā)提供了一種新的思路和方法,對IDL和VC資源共享的研究具有重要意義。

參考文獻

  [1] 韓培友.IDL可視化分析與應用[M].西安:西北工業(yè)大學出版社,2006.

  [2] 孫鑫,余安萍.VC++深入詳解[M].北京:電子工業(yè)出版社,2007.

  [3] 陶治,張文濤,熊顯名,等.基于IDL生成XML文件實現(xiàn)信息傳遞的方法[J].桂林電子科學學報,2014,34(1):56-59.

  [4] RSI. IDL reference guide(First Edition)[M]. American: RSI, 2005.

  [5] 徐爐清,頓敦.動態(tài)鏈接庫(DLL)的應用[J].機械與電子,1999(4):19-48.

  [6] 李義才,汪新慶,劉志軍,等.IDL與Visual C/C++語言進行混合編程的方法研究[J].計算機應用研究,2011(7):46-48.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載。