摘 要 隨著科學(xué)技術(shù)的不斷進(jìn)步與發(fā)展,編程技術(shù)在軟件開發(fā)中發(fā)揮著越來越重要的作用,在原來的軟件開發(fā)過程中,通常采用FORTRAN語言來進(jìn)行軟件所需的程序的編制,但是隨著科學(xué)技術(shù)以及計(jì)算機(jī)技術(shù)的快速發(fā)展,VC++語言的適用范圍不斷擴(kuò)大,在自身不斷發(fā)展的同時(shí)也為軟件開發(fā)奠定了堅(jiān)實(shí)的技術(shù)基礎(chǔ)。在綜合運(yùn)用多語言編程技術(shù)的基礎(chǔ)上,也把軟件開發(fā)推向了一個(gè)新的水準(zhǔn)。當(dāng)前對(duì)于多語言編程技術(shù)在軟件開發(fā)中的應(yīng)用進(jìn)行探討和研究具有重要的現(xiàn)實(shí)意義。本文將首先介紹動(dòng)態(tài)鏈接庫技術(shù),再對(duì)多語言編程技術(shù)進(jìn)行介紹,希望給讀者一定的啟發(fā)。
關(guān)鍵詞 多語言編程技術(shù) 軟件開發(fā) 應(yīng)用
中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A
1 動(dòng)態(tài)鏈接庫技術(shù)
動(dòng)態(tài)鏈接庫的英文翻譯是Dynamic Link Library,因此動(dòng)態(tài)鏈接庫又叫DLL,在DLL中通常可以包含很多的代碼和數(shù)據(jù),而這些代碼和數(shù)據(jù)可以同時(shí)被多個(gè)程序都是識(shí)別并使用,從而實(shí)現(xiàn)了各個(gè)編程技術(shù)的動(dòng)態(tài)鏈接。DLL作為一個(gè)不可執(zhí)行文件,同時(shí)提供了一個(gè)對(duì)普通程序的代碼進(jìn)行識(shí)別和調(diào)用的函數(shù),使得多個(gè)程序可以在相同的時(shí)間段內(nèi)訪問和使用同一個(gè)代碼。DDL文件一般都會(huì)帶有.dll這樣的擴(kuò)展名,因此也可將DLL作為一種磁盤文件來看待,在這個(gè)文件中包含了所需的全部數(shù)據(jù)、服務(wù)函數(shù)以及其他資源,DLL模塊也正是通過這些函數(shù)和數(shù)據(jù)資源實(shí)現(xiàn)動(dòng)態(tài)鏈接以及提供服務(wù)。在動(dòng)態(tài)鏈接庫進(jìn)行動(dòng)態(tài)鏈接之前必須與相應(yīng)的聲明函數(shù)或是引入函數(shù)作為引導(dǎo),否則就不可以實(shí)現(xiàn)程序的動(dòng)態(tài)鏈接。比如在DLL代碼中必須有像__declspec(dllexport) int MyFunction(int n);這樣的導(dǎo)出函數(shù)以及像__declspec(dllimport) int MyFuncition(int n);這樣的輸入聲明函數(shù),當(dāng)然僅僅擁有輸入和輸出兩種聲明函數(shù)是不能將其他程序連接到DLL文件上的,還需要其他的調(diào)用函數(shù)的配合。
2 多語言編程技術(shù)
在軟件開發(fā)設(shè)計(jì)的過程中,如果僅僅使用一種或是很少的編程程序是不能將軟件的實(shí)際功能完全實(shí)現(xiàn)的,因此多語言編程技術(shù)滿足了軟件設(shè)計(jì)多種編程語言的需要,也為多種編寫代碼實(shí)現(xiàn)鏈接提供了可能性。但是如果多種編程語言混合在一起,若想保證原來各種編程的運(yùn)行速度以及整體的運(yùn)行效率,對(duì)于多語言編程技術(shù)的首要要求就是具有一定的調(diào)用規(guī)則,主要包括命名規(guī)則、堆棧的使用等等,這些都是多語言編程得以實(shí)現(xiàn)的基礎(chǔ),也可以說是關(guān)鍵性的問題。以下將對(duì)多語言混合編程的函數(shù)調(diào)用規(guī)則以及數(shù)據(jù)結(jié)構(gòu)作簡要的分析。
2.1 調(diào)用規(guī)則
不同的語言編程,其程序類型也不盡相同,因此多語言編程技術(shù)的調(diào)用規(guī)則還需要滿足不同的程序類型需求,比如C++語言常用的調(diào)用函數(shù)是FUNCTION函數(shù)。函數(shù)的調(diào)用規(guī)則決定了函數(shù)下一階段的運(yùn)行,它直接影響變量的傳遞和接受,還會(huì)對(duì)變量的順序產(chǎn)生一定的影響。因此在一些類型的語言中,需要設(shè)定特定的函數(shù)進(jìn)行轉(zhuǎn)換的聲明。另外調(diào)用規(guī)則還和函數(shù)的數(shù)據(jù)傳輸以及數(shù)據(jù)的傳輸形式具有一定的關(guān)聯(lián)性,比如傳遞的是一個(gè)數(shù)值還是地址都和調(diào)用規(guī)則有聯(lián)系。
2.2 字符轉(zhuǎn)換
一般情況下,在C語言中字符出現(xiàn)的形式主要以指針為主,另外在C語言中的字符傳遞方式和地址的傳遞方式相同,但這并不包括字符長度的傳遞。而一般在C語言中都以字符‘\0’作為每一行的結(jié)束符,但是在一些其他的編程語言中,有的語言是直接不具有結(jié)束字符,比如在FORTRAN語言中就沒有結(jié)束符,因此要想實(shí)現(xiàn)C和FORTRAN之間字符的傳遞,可以直接將字符轉(zhuǎn)化為C字符或者是直接編寫相應(yīng)的程序接收字符,后者也可以實(shí)現(xiàn)在進(jìn)行字符轉(zhuǎn)換和傳遞的同時(shí)進(jìn)行字符長度變量的傳遞。
3 多語言編程的實(shí)現(xiàn)
3.1 在C中調(diào)用FORTRAN的動(dòng)態(tài)鏈接庫
在DLL文件中的函數(shù)會(huì)根據(jù)相對(duì)應(yīng)的符號(hào)名或是整數(shù)值進(jìn)行函數(shù)表的歸納,當(dāng)DLL引出一個(gè)符號(hào)時(shí)必須使用相對(duì)應(yīng)的符號(hào)進(jìn)行引出,將這些符號(hào)統(tǒng)稱在一起就叫做符號(hào)的引入。在FORTRAN語言中,DLL用戶可以直接通過文件的屬性找到與之對(duì)應(yīng)的函數(shù)或是代碼,從而實(shí)現(xiàn)函數(shù)的聲明。將一些類似的代碼或是數(shù)據(jù)和多個(gè)函數(shù)進(jìn)行鏈接之后就會(huì)生成所需要的test.dll和zc.dll文件。
當(dāng)實(shí)現(xiàn)動(dòng)態(tài)鏈接之后,接下來所要考慮的就是如何進(jìn)行動(dòng)態(tài)鏈接庫的使用。一般情況下,無論是.LIB文件還是.DLL文件都采用隱式連接或是靜態(tài)連接的方式,因此當(dāng)有應(yīng)用程序訪問DLL文件時(shí),動(dòng)態(tài)鏈接庫必須存在該程序的目錄。這樣就可以直接避免出現(xiàn)鏈接庫路徑連接錯(cuò)誤。在實(shí)際的程序設(shè)計(jì)和軟件開發(fā)中,采用動(dòng)態(tài)聯(lián)編的方式來實(shí)現(xiàn)鏈接庫的調(diào)用比較多。
3.2 在FORTRAN中調(diào)用C的動(dòng)態(tài)鏈接庫
在實(shí)際的算法運(yùn)行過程中,由于一些算法或是正反演算法的迭代使用和計(jì)算,這就對(duì)數(shù)據(jù)的傳輸和處理帶來影響,并不是所有的數(shù)據(jù)結(jié)果處理都很精確或是合理,嚴(yán)重時(shí)還會(huì)導(dǎo)致算法或是整個(gè)編程運(yùn)行停止,因此對(duì)于一些重要的參數(shù)或是函數(shù)進(jìn)行監(jiān)控室非常必要的。在VC++進(jìn)行調(diào)用算法動(dòng)態(tài)鏈接庫時(shí),如果將鏈接運(yùn)行的信息即時(shí)顯示在相關(guān)屏幕上就可以方便對(duì)程序運(yùn)行工程的判斷和分析。在VC++中可以編寫幾個(gè)控制動(dòng)態(tài)鏈接庫的函數(shù),這些函數(shù)的聲明也可以作為FORTRAN算法的引出函數(shù),這時(shí)候在運(yùn)行FORTRAN算法動(dòng)態(tài)鏈接庫的同時(shí)也可以將算法的信息顯示給VC++的應(yīng)用程序的狀態(tài)窗口,根據(jù)窗口顯示的函數(shù)返回值,用戶就可以實(shí)現(xiàn)對(duì)于動(dòng)態(tài)鏈接庫的實(shí)時(shí)控制以及在FORTRAN中調(diào)用C的動(dòng)態(tài)鏈接庫。
4 結(jié)語
盡管當(dāng)前編程技術(shù)日新月異,但是在系統(tǒng)或是軟件設(shè)計(jì)中如何將這些云煙編程技術(shù)進(jìn)行綜合運(yùn)用或是實(shí)現(xiàn)各個(gè)語言程序的相互連接問題,仍是當(dāng)前在軟件開發(fā)中仍需要考慮的問題。而在研究中發(fā)現(xiàn),DLL作為一個(gè)可以由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù)的庫,實(shí)現(xiàn)了多語言編程技術(shù)的相互連接,實(shí)現(xiàn)了資源共享,是實(shí)現(xiàn)多語言編程技術(shù)在軟件開發(fā)中的應(yīng)用的基礎(chǔ)和前提。
參考文獻(xiàn)
[1] 楊小鋒,陳艷燕.智能卡中JNI技術(shù)的應(yīng)用實(shí)現(xiàn)[J].浙江師范大學(xué)學(xué)報(bào)(自然科學(xué)版).2005(03).
[2] 周濤,郭占元,郭向榮.FORTRAN與C#混合編程在土木工程計(jì)算中的應(yīng)用[J].山東交通學(xué)院學(xué)報(bào).2009(01).
[3] 湯洪志,周華中,胡文平,周亞東.VB與Visual Fortran混合語言編程及其在物探化探數(shù)值計(jì)算中的應(yīng)用[J].物探化探計(jì)算技術(shù).2002(01).