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

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

  關(guān)鍵詞交互式語(yǔ)言高級(jí)語(yǔ)言VC,;信息傳遞,;解析函數(shù)調(diào)用

0 引言

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

1 開(kāi)發(fā)語(yǔ)言的使用

  IDL是一種數(shù)據(jù)可視化面向矩陣的第4代交互式計(jì)算機(jī)語(yǔ)言,,是集成可視化、大型商業(yè)開(kāi)發(fā),、交互式分析為一體的高級(jí)開(kāi)發(fā)環(huán)境[1],。IDL主要面向?qū)ο鬄榭梢暬瘮?shù)據(jù)分析,它的語(yǔ)法結(jié)構(gòu)簡(jiǎn)單、功能強(qiáng)大,、編程效率高,,簡(jiǎn)單的編程實(shí)現(xiàn)復(fù)雜的圖像分析,是跨平臺(tái)應(yīng)用開(kāi)發(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ù)處理語(yǔ)言。將IDL與VC有機(jī)地結(jié)合在一起,,發(fā)揮各自優(yōu)點(diǎn),,以實(shí)現(xiàn)資源共享,使IDL的信息具有廣泛性和通用性,。

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

  IDL為了擴(kuò)充編程和數(shù)據(jù)處理能力,,提供了應(yīng)用程序接口(API)技術(shù)。利用API技術(shù)可方便地實(shí)現(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命令時(shí),,將調(diào)用Windows的DOS Shell命令窗口,,使用時(shí)需要轉(zhuǎn)換。LINKIMAGE方法是通過(guò)系統(tǒng)所支持的動(dòng)態(tài)鏈接接口完成程序調(diào)用任務(wù),,但使用此方法,,開(kāi)發(fā)者需要有豐富的IDL內(nèi)部知識(shí),該方法不適合一般的開(kāi)發(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),但不需要開(kāi)發(fā)者對(duì)IDL內(nèi)部特別熟悉,,因此本文選用CALL-EXTERNAL方法來(lái)調(diào)用VC程序[4],。

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

003.jpg

  根據(jù)流程圖編寫程序。調(diào)用VC輸入數(shù)據(jù)最終顯示結(jié)果如圖3所示,??梢钥闯觯摲椒ň帉懙某绦蚰軌蚝芎玫卣{(diào)用VC輸入的數(shù)據(jù),,從而表明此方法的正確性,、可行性。

  2.2 VC調(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)鏈接庫(kù)中[6],,調(diào)用時(shí)主要的3個(gè)環(huán)節(jié)如下。

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

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

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

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

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

  int IDL_Execute(char*comd),;

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

  int IDL_Cleaup(int just cleanup);

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

004.jpg

  根據(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所示,。

005.jpg

3 實(shí)驗(yàn)

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

006.jpg

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

4 結(jié)論

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

參考文獻(xiàn)

  [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)鏈接庫(kù)(DLL)的應(yīng)用[J].機(jī)械與電子,,1999(4):19-48.

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


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