米云博,熊顯名,王 永(桂林電子科技大學(xué) 電子工程與自動(dòng)化學(xué)院,廣西 桂林 541004)
IDL與VC信息相互傳遞的實(shí)現(xiàn)方法
米云博,熊顯名,王永
(桂林電子科技大學(xué)電子工程與自動(dòng)化學(xué)院,廣西桂林 541004)
為了準(zhǔn)確傳遞和保存IDL可視化數(shù)據(jù)信息,實(shí)現(xiàn)語言之間的互通性、資源共享性、數(shù)據(jù)信息的多樣性、調(diào)用格式的不同性,基于解析函數(shù)調(diào)用的方法,運(yùn)用動(dòng)態(tài)鏈接庫和一系列的子類函數(shù)獲取數(shù)據(jù),使IDL與VC之間相互轉(zhuǎn)換信息,可通過VC直接對(duì)遙感影像進(jìn)行處理,為應(yīng)用系統(tǒng)的研發(fā)提供了一種新方法。試驗(yàn)實(shí)例證明,該方法能簡(jiǎn)單有效地將IDL與VC有機(jī)地結(jié)合在一起,實(shí)現(xiàn)了信息相互傳遞,并通過C直接對(duì)遙感影像進(jìn)行操作處理。
交互式語言;高級(jí)語言VC;信息傳遞;解析函數(shù)調(diào)用
隨著遙感技術(shù)的不斷發(fā)展,交互式語言(IDL)成為人們關(guān)注的重要語言[1],在眾多行業(yè)廣泛應(yīng)用。由于大部分軟件和通信保存格式都是用高級(jí)語言C來編寫的,因此,將IDL和C語言有機(jī)地結(jié)合在一起,且不需要改寫原有的程序就能將遙感信息數(shù)據(jù)傳遞并保存,成為當(dāng)前遙感領(lǐng)域急需解決的問題之一。C語言具有通用性、可擴(kuò)展性、廣泛性強(qiáng)的特點(diǎn)[2],因此應(yīng)用最為廣泛。目前,IDL與C語言的結(jié)合還比較少,各個(gè)國(guó)家都開展了IDL與C語言接口信息傳遞的研究,而中國(guó)在這方面還處在探討階段。因此,如何將IDL有效信息通過C語言傳遞并保存成為目前遙感領(lǐng)域以及高級(jí)語言領(lǐng)域里一個(gè)值得研究的方向。本文提出了一種函數(shù)調(diào)用方法,有效地實(shí)現(xiàn)了信息在IDL 與C語言之間的傳遞。
IDL是一種數(shù)據(jù)可視化面向矩陣的第4代交互式計(jì)算機(jī)語言,是集成可視化、大型商業(yè)開發(fā)、交互式分析為一體的高級(jí)開發(fā)環(huán)境[1]。IDL主要面向?qū)ο鬄榭梢暬瘮?shù)據(jù)分析,它的語法結(jié)構(gòu)簡(jiǎn)單、功能強(qiáng)大、編程效率高,簡(jiǎn)單的編程實(shí)現(xiàn)復(fù)雜的圖像分析,是跨平臺(tái)應(yīng)用開發(fā)的最佳選擇,它提供的圖像類能夠快速地對(duì)圖像進(jìn)行分析,可與OpenGL相媲美,因此被廣泛地應(yīng)用在遙感領(lǐng)域中[3]。
IDL支持各種操作系統(tǒng)平臺(tái),具有很好的移植性,為與VC相結(jié)合提供了基礎(chǔ)。VC是微軟推出的運(yùn)行非常穩(wěn)定、非常有影響力的專業(yè)級(jí)程序設(shè)計(jì)與數(shù)據(jù)處理語言。將IDL與VC有機(jī)地結(jié)合在一起,發(fā)揮各自優(yōu)點(diǎn),以實(shí)現(xiàn)資源共享,使IDL的信息具有廣泛性和通用性。
IDL為了擴(kuò)充編程和數(shù)據(jù)處理能力,提供了應(yīng)用程序接口(API)技術(shù)。利用API技術(shù)可方便地實(shí)現(xiàn)在IDL中調(diào)用 VC的可執(zhí)行文件、函數(shù)和程序。數(shù)據(jù)傳遞總體框圖如圖1所示。
圖1 數(shù)據(jù)傳遞框圖
2.1IDL調(diào)用 VC
在IDL中調(diào)用VC可以使用3種方法:SPAWN方法、LINKIMAGE方法和CALL-EXTERNAL方法。利用SPAWN方法可以直接調(diào)用VC的可執(zhí)行文件,但是執(zhí)行調(diào)用不帶參數(shù)的SPAWN命令時(shí),將調(diào)用Windows的DOS Shell命令窗口,使用時(shí)需要轉(zhuǎn)換。LINKIMAGE方法是通過系統(tǒng)所支持的動(dòng)態(tài)鏈接接口完成程序調(diào)用任務(wù),但使用此方法,開發(fā)者需要有豐富的 IDL內(nèi)部知識(shí),該方法不適合一般的開發(fā)者使用。利用 CALL-EXTERNAL方法能夠在IDL調(diào)用VC中精準(zhǔn)地匹配數(shù)據(jù)結(jié)構(gòu),對(duì)于非結(jié)構(gòu)數(shù)據(jù)的傳輸,不需要調(diào)用其他命令窗口,具有 LINKIMAGE方法的優(yōu)點(diǎn),但不需要開發(fā)者對(duì)IDL內(nèi)部特別熟悉,因此本文選用CALL-EXTERNAL方法來調(diào)用VC程序[4]。
IDL程序能在運(yùn)行時(shí)動(dòng)態(tài)調(diào)用VC程序,通過CALL-EXTERNAL接口函數(shù)裝入共享目標(biāo)庫實(shí)現(xiàn)函數(shù)調(diào)用,在 Windows平臺(tái)上,IDL通過動(dòng)態(tài)鏈接庫技術(shù)來實(shí)現(xiàn),能夠方便地實(shí)現(xiàn)模塊化[5]。IDL調(diào)用動(dòng)態(tài)鏈接庫遵循C語言中函數(shù)調(diào)用協(xié)議。任何的動(dòng)態(tài)庫調(diào)用原型都被定義成 returntype()形式,返回值必須是CALL-EXTERNAL函數(shù)支持的數(shù)據(jù)類型。其中所有的參數(shù)都能以“傳值”或“引用”方式進(jìn)行傳遞。程序編寫流程圖如圖2所示。
根據(jù)流程圖編寫程序。調(diào)用VC輸入數(shù)據(jù)最終顯示結(jié)果如圖3所示??梢钥闯?,該方法編寫的程序能夠很好地調(diào)用VC輸入的數(shù)據(jù),從而表明此方法的正確性、可行性。
圖2 IDL調(diào)用VC程序流程圖
圖3 IDL調(diào)用VC結(jié)果顯示圖
2.2VC調(diào)用IDL
利用IDL的API,可以實(shí)現(xiàn)VC調(diào)用IDL的命令、函數(shù)和數(shù)據(jù)。調(diào)用IDL的技術(shù)在操作系統(tǒng)中都會(huì)調(diào)用IDL的驅(qū)動(dòng)程序,而驅(qū)動(dòng)程序會(huì)存在于IDL動(dòng)態(tài)鏈接庫中[6],調(diào)用時(shí)主要的3個(gè)環(huán)節(jié)如下。
(1)初始化IDL。在調(diào)用IDL之前要對(duì)IDL進(jìn)行初始化,使用 IDL_Win32Init()函數(shù)來對(duì) IDL進(jìn)行初始化,使用方法為:其中,abc取值為0保留參數(shù),后面兩個(gè)參數(shù)都是句柄,null也是一個(gè)保留參數(shù)取值為 NULL的數(shù),當(dāng)初始化成功返回值為“TURE”。
(2)VC應(yīng)用程序中輸出在同一個(gè)邏輯窗口,當(dāng)IDL被調(diào)用時(shí),默認(rèn)的輸出函數(shù)會(huì)被 IDL所覆蓋,需要通過IDL_ToutPush和 IDL_ToutPop來轉(zhuǎn)移 IDL的輸出結(jié)果到指定的函數(shù)中。IDL中提供了IDL_Execute()和 IDL_ExecuteStr()兩個(gè)函數(shù),用于在其他語言中調(diào)用 IDL語句,調(diào)用具體形式為;
(3)在調(diào)用完IDL語句之后主函數(shù)執(zhí)行完之前,需要通過函數(shù) IDL_Cleaup來關(guān)閉IDL。調(diào)用方法為:
int IDL_Cleaup(int just cleanup);
根據(jù)IDL的調(diào)用方法在VC6.0的編譯環(huán)境下,通過動(dòng)態(tài)鏈接庫實(shí)現(xiàn)一個(gè)能調(diào)用IDL的VC程序,程序編寫流程圖如圖4所示。
根據(jù)流程圖編寫程序具體實(shí)現(xiàn)VC調(diào)用IDL,VC程序調(diào)用“IDL輸入”的結(jié)果,在 IDL編輯對(duì)話框輸入編輯內(nèi)容,在VC編輯窗口點(diǎn)擊接收按鈕將“IDL輸入”數(shù)據(jù)顯示在VC編輯對(duì)話框的顯示框內(nèi),顯示結(jié)果如圖5所示。
圖4 VC調(diào)用IDL流程圖
圖5 VC調(diào)用IDL的效果圖
根據(jù)上述方法可知,IDL 與VC之間可以通過動(dòng)態(tài)鏈接庫相互之間傳遞數(shù)據(jù),由于 IDL主要是 GUI界面,大部分是對(duì)圖像進(jìn)行處理,因此對(duì)圖像數(shù)據(jù)信息的傳遞尤為重要。根據(jù)上述方法進(jìn)行程序的編寫,使VC能夠接收IDL圖像并以VC的保存格式來保存IDL的數(shù)據(jù)信息,并直接對(duì)圖像處理,再將處理結(jié)果直接傳遞給 IDL。本文利用IDL編寫的水深反演軟件將處理的圖像信息按照上述方法傳輸給VC程序,利用VC來顯示IDL處理圖像的結(jié)果,如圖6和圖7所示。
圖6 IDL水深反演軟件進(jìn)行圖像處理結(jié)果圖
圖7 VC調(diào)用IDL資源及圖像處理圖
根據(jù)圖像顯示結(jié)果可知,IDL和VC可以相互轉(zhuǎn)換數(shù)據(jù),也可以將數(shù)據(jù)以它們各自的形式進(jìn)行保存,從而說明IDL和VC可以很好地結(jié)合在一起,信息可以相互傳遞實(shí)現(xiàn)資源共享。
本文介紹了將IDL和VC相互結(jié)合的方法,讓它們體現(xiàn)各自的特點(diǎn),詳細(xì)描述了實(shí)現(xiàn)方法,并用實(shí)際例子來證明了本文方法的可行性和正確性。本文方法為IDL 和VC混合開發(fā)軟件提供了參考基礎(chǔ),也為兩種語言的應(yīng)用研究開發(fā)提供了一種新的思路和方法,對(duì)IDL和 VC資源共享的研究具有重要意義。
[1]韓培友.IDL可視化分析與應(yīng)用[M].西安:西北工業(yè)大學(xué)出版社,2006.
[2]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業(yè)出版社,2007.
[3]陶治,張文濤,熊顯名,等.基于IDL生成XML文件實(shí)現(xiàn)信息傳遞的方法[J].桂林電子科學(xué)學(xué)報(bào),2014,34(1):56-59.
[4]RSI.IDL reference guide(First Edition)[M].American:RSI,2005.
[5]徐爐清,頓敦.動(dòng)態(tài)鏈接庫(DLL)的應(yīng)用[J].機(jī)械與電子,1999(4):19-48.
[6]李義才,汪新慶,劉志軍,等.IDL與 Visual C/C++語言進(jìn)行混合編程的方法研究 [J].計(jì)算機(jī)應(yīng)用研究,2011 (7):46-48.
The method of achieving information transfer between IDL and VC
Mi Yunbo,Xiong Xianming,Wang Yong
(School of Electrical Engineering and Automation,Guilin University of Electronic Technology,Guilin 541004,China)
In order to accurately transfer and save the IDL visualization data information,achieve interoperability between different languages,resource sharing,the diversity of data information and the dissimilarity of call format,a new way has been provided for development of application system.It′s based on the method of a parsing function call,using dynamic link library and a series of subclasses function to get the data which can transfer information between IDL and VC and deal with remote sensing image by VC language directly.Verified by tests,this method unites IDL and VC together simply and effectively.It can achieve transformation of mutual information and deal with remote sensing image by C language directly.
Interactive Data Language(IDL);advanced language VC;information transfer;call of parsing function
TP79
A
1674-7720(2015)02-0080-03
(2014-08-28)
米云博(1987-),女,碩士研究生,主要研究方向:遙感技術(shù)應(yīng)用以及圖像處理。
熊顯名(1964-),男,本科,研究員,主要研究方向:光學(xué)測(cè)試及計(jì)算機(jī)技術(shù)。
王永(1986-),男,碩士研究生,主要研究方向:遙感技術(shù)應(yīng)用以及圖像處理。
網(wǎng)絡(luò)安全與數(shù)據(jù)管理2015年2期