專利名稱::非托管語言與.net服務(wù)端交互及其生成方法、裝置、系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)
技術(shù)領(lǐng)域:
,尤其涉及計(jì)算機(jī)語言中非托管語言與.NET服務(wù)端交互方法、裝置及系統(tǒng),以及該交互裝置對(duì)應(yīng)的生成方法和裝置。
背景技術(shù):
:.NET是基于互聯(lián)網(wǎng)的跨語言軟件開發(fā)平臺(tái),順應(yīng)了當(dāng)今軟件工業(yè)分布式計(jì)算、面向組件、企業(yè)級(jí)應(yīng)用、軟件服務(wù)化和以Web為中心等大趨勢(shì)。.NET并非開發(fā)語言,但是.NET開發(fā)平臺(tái)可以支持多種開發(fā)語言,如C并語言、C++、VisualBasic、Jscript等。.NET卡是基于.NET技術(shù)平臺(tái)的虛擬機(jī),能夠模擬運(yùn)行各種指令,在.NET卡中含有并可以運(yùn)行.NET程序,并且.NET卡上運(yùn)行的軟件對(duì)運(yùn)行環(huán)境沒有特殊要求。.NET開發(fā)平臺(tái)所支持的開發(fā)語言一般是由公共語言運(yùn)行庫(kù)(CLR)環(huán)境執(zhí)行的代碼,這種代碼稱為托管代碼(managedcode)。應(yīng)用托管代碼所開發(fā)出的應(yīng)用程序可以獲得公共語言運(yùn)行庫(kù)服務(wù),例如自動(dòng)垃圾回收、運(yùn)行庫(kù)類型檢查和安全支持等。這些服務(wù)幫助提供獨(dú)立于平臺(tái)和語言的、統(tǒng)一的托管代碼應(yīng)用程序行為。Microsoft.NETRemoting(Microsoft.NET遠(yuǎn)禾呈方法調(diào)用^見范)4是供一種允許對(duì)象通過應(yīng)用程序域與另一對(duì)象進(jìn)行交互的框架,并且Microsoft.NETRemoting提供了一個(gè)可擴(kuò)展的框架,它可以選擇不同的傳輸機(jī)制(HTTP和TCP是內(nèi)置的)、不同的編碼方式、安全設(shè)置(IIS或SSL),同時(shí)提供多種服務(wù),包括激活和生存期支持。例如,.NET服務(wù)端是可以運(yùn)行.NET程序的服務(wù)端,通過C朽吾言開發(fā)的應(yīng)用程序需要訪問.NET服務(wù)端時(shí),可以采用CH吾言規(guī)范提供的C/S(Client/Server,客戶機(jī)/服務(wù)器)模式進(jìn)行的遠(yuǎn)程調(diào)用。但是在對(duì).NET服務(wù)端進(jìn)行遠(yuǎn)程調(diào)用時(shí),.NET服務(wù)端中的服務(wù)只能通過Ctf的Remoting(遠(yuǎn)程方法調(diào)用規(guī)范)機(jī)制和傳統(tǒng)APDU的方式訪問,這種調(diào)用模式需要所采用的語能夠支持類和程序集。因此,在對(duì).NET服務(wù)端進(jìn)行遠(yuǎn)程調(diào)用的應(yīng)用過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題對(duì)于在CLR環(huán)境外部,由操作系統(tǒng)直接執(zhí)行的非托管代碼(UnmanagedCode)而言,由于C語言等非4乇管語言不支持類和程序集的才既念,調(diào)用.NET服務(wù)端時(shí)存在種種局限,給.NET服務(wù)端的推廣和發(fā)展帶來了;f艮大的局限性。
發(fā)明內(nèi)容本發(fā)明提供一種非托管語言與.NET服務(wù)端交互及其生成方法、裝置、系統(tǒng),使得非托管語言能夠與.NET服務(wù)端進(jìn)行交互實(shí)現(xiàn)遠(yuǎn)程調(diào)用。為達(dá)到上述目的,本發(fā)明采用如下技術(shù)方案一種非托管語言與.NET服務(wù)端交互方法,包括將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式;將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果;對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回》合所述客戶端。一種非托管語言與.NET服務(wù)端交互裝置,包括轉(zhuǎn)換單元,用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式;發(fā)送單元,用于將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收單元,用于接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果;解析單元,用于對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;返回單元,用于將所述返回值返回給所述客戶端。一種非托管語言與.NET服務(wù)端交互系統(tǒng),包括客戶端、.NET服務(wù)端;還包括非托管語言與.NET服務(wù)端交互裝置;所述客戶端用于向所述.NET服務(wù)端發(fā)起的非托管語言訪問請(qǐng)求;所述非托管語言與.NET服務(wù)端交互裝置用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式,并將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求6發(fā)送到.NET服務(wù)端;所述.NET服務(wù)端用于運(yùn)行所述訪問請(qǐng)求;所述非托管語言與.NET服務(wù)端交互裝置還用于接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果;對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。一種非托管語言與.NET服務(wù)端交互裝置的生成方法,包括獲取被下載到.NET服務(wù)端中的可執(zhí)行文件的遠(yuǎn)程調(diào)用信息;根據(jù)所述遠(yuǎn)程調(diào)用信息中的公鑰標(biāo)識(shí)、命名空間和遠(yuǎn)程類類名生成非托管語言對(duì)應(yīng)的函數(shù)聲明文件;根據(jù)生成的所述非托管語言對(duì)應(yīng)的函數(shù)聲明文件中的函數(shù)名生成非托管語言對(duì)應(yīng)的函數(shù)定義文件;將預(yù)先定義的中轉(zhuǎn)函數(shù)加入所述函數(shù)定義文件;所述中轉(zhuǎn)函數(shù)用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式,并將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果,并對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。一種非托管語言與.NET服務(wù)端交互裝置的生成裝置,包括獲取單元,用于獲取被下載到.NET服務(wù)端中的可執(zhí)行文件的遠(yuǎn)程調(diào)用信息;第一生成單元,用于根據(jù)所述遠(yuǎn)程調(diào)用信息中的公鑰標(biāo)識(shí)、命名空間和遠(yuǎn)程類類名生成非托管語言對(duì)應(yīng)的函數(shù)聲明文件;第二生成單元,用于根據(jù)所述第一生成單元生成的非托管語言對(duì)應(yīng)的函數(shù)聲明文件中的函數(shù)名生成非托管語言對(duì)應(yīng)的函數(shù)定義文件;加入單元,用于將預(yù)先定義的中轉(zhuǎn)函數(shù)加入所述函數(shù)定義文件;所述中轉(zhuǎn)函數(shù)用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式,并將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果,并對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。本發(fā)明提供的非托管語言與.NET服務(wù)端交互及其生成方法、裝置、系統(tǒng),通過提取.NET服務(wù)端中可執(zhí)行文件的遠(yuǎn)程調(diào)用信息,生成非托管語言的函數(shù)聲明文件和函數(shù)定義文件,并在函數(shù)定義文件中寫入中轉(zhuǎn)函數(shù)。中轉(zhuǎn)函數(shù)主要用來將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式,并將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;中轉(zhuǎn)函數(shù)在接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果后,對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值,并將所述返回值返回給所述客戶端。在非托管語言需要訪問.NET服務(wù)端時(shí),需要將上述函數(shù)聲明文件和函數(shù)定義文件寫入非托管語言的工程,以便在運(yùn)行非托管語言程序時(shí),能夠通過中轉(zhuǎn)函數(shù)的功能調(diào)用.NET服務(wù)端的服務(wù),使得非托管語言能夠與.NET服務(wù)端進(jìn)行交互實(shí)現(xiàn)遠(yuǎn)程調(diào)用,解決了非托管語言程序調(diào)用.NET服務(wù)端存在局限性的問題。為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例1中非托管語言與.NET服務(wù)端交互方法流程圖;圖2為本發(fā)明實(shí)施例1中非托管語言與.NET服務(wù)端交互裝置框圖;圖3為本發(fā)明實(shí)施例1中非托管語言與.NET服務(wù)端交互系統(tǒng)框圖;圖4為本發(fā)明實(shí)施例1中非托管語言與.NET服務(wù)端交互裝置的生成方法流程圖5為本發(fā)明實(shí)施例1中非托管語言與.NET服務(wù)端交互裝置的生成裝置框圖6為本發(fā)明實(shí)施例2中非托管語言與.NET服務(wù)端交互具體運(yùn)用的流程圖7為本發(fā)明實(shí)施例2中可執(zhí)行文件元數(shù)據(jù)表的示意圖8為本發(fā)明實(shí)施例3中非托管語言與.NET服務(wù)端交互裝置框圖9為本發(fā)明實(shí)施例3中非托管語言與.NET服務(wù)端交互系統(tǒng)框圖IO為本發(fā)明實(shí)施例3中非托管語言與.NET服務(wù)端交互裝置的生成裝置框圖。具體實(shí)施例方式.NET服務(wù)端是微軟的新一代技術(shù)平臺(tái),是全新的基于互聯(lián)網(wǎng)的跨語言軟件開發(fā)平臺(tái)可以支持多種開發(fā)語言,如CH吾言、C++、VisualBasic、Jscript等。然而,在公共語言運(yùn)行庫(kù)(CLR)環(huán)境的外部,由操作系統(tǒng)直接執(zhí)行的非托管語言,例如C語言,由于不支持類的概念、或者不支持類和程序集的概念,調(diào)用.NET服務(wù)端服務(wù)存在著局限,不能直接按照上述調(diào)用模式進(jìn)行,為解決此問題,本發(fā)明實(shí)施例提供非托管語言與.NET服務(wù)端交互方法、裝置、系統(tǒng)及生成方法和裝置。下面以非托管語言調(diào)用.NET服務(wù)端的服務(wù)為例結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。實(shí)施例1:本發(fā)明實(shí)施例提供一種非托管語言與.NET服務(wù)端交互方法,如圖1所示,該交互方法包括如下過程101、在采用非托管語言的客戶端需要與.NET服務(wù)端進(jìn)行通信時(shí),客戶端會(huì)發(fā)起一個(gè)非托管語言的訪問請(qǐng)求,本實(shí)施例中需要將該訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)才各式;其中,遠(yuǎn)程方法調(diào)用規(guī)范格式具體為Remoting格式,將訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式就是一種數(shù)據(jù)分析,具體為獲取訪問請(qǐng)求所需的類名、函數(shù)名、參數(shù)等,并將該獲取的類名、函數(shù)名、參數(shù)等有序存放,具體的實(shí)現(xiàn)方式可以采用^f旦不限于如實(shí)施例2中步驟607中的實(shí)現(xiàn)Remoting打包,構(gòu)造RemotingHeader,構(gòu)造參數(shù)Object的方法;上述的非托管語言主要指在CLR環(huán)境外部由操作系統(tǒng)直接執(zhí)行的語言,例如C語言;9本實(shí)施例中可以將上述遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端,以便.NET服務(wù)端運(yùn)行訪問請(qǐng)求相應(yīng)的操作;103、.NET服務(wù)端運(yùn)行后會(huì)將運(yùn)行結(jié)果返回,本實(shí)施例中還需要接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果;104、然后對(duì)遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;其中,解析具體的實(shí)現(xiàn)方式可以采用《旦不限于實(shí)施例2步驟607中的Remoting的解包,返回值的參數(shù)個(gè)數(shù),解析RemotingHeader,解析返回值的參數(shù),和返回值。105、最后本發(fā)明實(shí)施例將所述返回值返回給所述客戶端,最終完成客戶端與.NET服務(wù)端之間的通孑言。本發(fā)明實(shí)施例還提供一種非托管語言與.NET服務(wù)端交互裝置,如圖2所示,該交互裝置包括轉(zhuǎn)換單元21、發(fā)送單元22、接收單元23、解析單元24和返回單元25。在采用非托管語言的客戶端向.NET服務(wù)端發(fā)起一個(gè)非托管語言的訪問請(qǐng)求后,本發(fā)明實(shí)施例中的轉(zhuǎn)換單元21用于將該訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式;發(fā)送單元22用于將遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;.NET服務(wù)端運(yùn)行訪問請(qǐng)求相應(yīng)的操作后返回運(yùn)行結(jié)果,所述接收單元23用于接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果;然后通過解析單元24對(duì)遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;所述返回單元25用于將所述返回值返回給所述客戶端。本發(fā)明實(shí)施例還提供一種非托管語言與.NET服務(wù)端交互系統(tǒng),如圖3所示,該系統(tǒng)包括客戶端31、.NET服務(wù)端32;在客戶端采用非托管語言的情況下,本發(fā)明實(shí)施例中的交互系統(tǒng)還包括非托管語言與.NET服務(wù)端交互裝置33。其中,所述客戶端31用于向所述.NET服務(wù)端32發(fā)起非托管語言訪問請(qǐng)求;所述非托管語言與.NET服務(wù)端交互裝置33用于將所述訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式,然后將遠(yuǎn)程方法調(diào)用規(guī)范(RemoUng)格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端32;所述.NET服務(wù)端32接收到訪問請(qǐng)求后運(yùn)行所述訪問請(qǐng)求,并將運(yùn)行結(jié)果反饋給非托管語言與.NET服務(wù)端交互裝置33;所述非托管語言與.NET服務(wù)端交互裝置33還用于接收.NET服務(wù)端32返回的遠(yuǎn)程方法調(diào)用規(guī)范(RemoUng)沖各式的運(yùn)行結(jié)果,然后對(duì)遠(yuǎn)程方法調(diào)用A見范(Remoting)格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值,并將所述返回值返回給所述客戶端31,非托管語言與.NET服務(wù)端交互裝置存在于客戶端31中。本發(fā)明實(shí)施例還提供一種非托管語言與.NET服務(wù)端交互裝置的生成方法,如圖4所示,該方法包括401、在制作.NET服務(wù)端時(shí),需要編譯.NET服務(wù)端程序集,并在編譯過程中為.NET服務(wù)端程序集添加強(qiáng)命名,得到添加強(qiáng)命名的可執(zhí)行文件,然后將該可執(zhí)行文件下載到.NET服務(wù)端。本過程中需要獲取上述可執(zhí)行文件的遠(yuǎn)程調(diào)用信息,遠(yuǎn)程調(diào)用信息具體包括公鑰標(biāo)識(shí)、命名空間、遠(yuǎn)程類類名以及多種函數(shù)名;402、為了能夠生成所述交互裝置,本發(fā)明實(shí)施例需要根據(jù)所述遠(yuǎn)程調(diào)用信息中的公鑰標(biāo)識(shí)、命名空間和遠(yuǎn)程類類名生成非托管語言對(duì)應(yīng)的函數(shù)聲明文件;403、然后根據(jù)該生成餓非托管語言對(duì)應(yīng)的函數(shù)聲明文件中的函數(shù)名生成非托管語言對(duì)應(yīng)的函數(shù)定義文件;404、并且將預(yù)先定義的中轉(zhuǎn)函數(shù)加入所述函數(shù)定義文件,客戶端通過函數(shù)定義文件和函數(shù)聲明文件,就能將訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式,并從遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果中解析出返回值,其中最主要的功能在于上述中轉(zhuǎn)函數(shù),該中轉(zhuǎn)函數(shù)主要用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式,并將遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果,并對(duì)遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所a戶端。本發(fā)明實(shí)施例還提供一種非托管語言與.NET服務(wù)端交互裝置的生成裝置,如圖5所示,該生成裝置包括獲取單元51、第一生成單元52、第二生成單元53和力口入單元54。其中,獲取單元51用于獲取被下載到.NET服務(wù)端中的可執(zhí)行文件的遠(yuǎn)程調(diào)用信息;第一生成單元52用于根據(jù)所述遠(yuǎn)程調(diào)用信息中的公鑰標(biāo)識(shí)、命名空間和遠(yuǎn)程類類名生成非托管語言對(duì)應(yīng)的函數(shù)聲明文件;第二生成單元53用于根據(jù)第一生成單元52生成額度非托管語言對(duì)應(yīng)的函數(shù)聲明文件中的函數(shù)名生成非托管語言對(duì)應(yīng)的函^t定義文件;加入單元54用于將預(yù)先定義的中轉(zhuǎn)函^:加入所述函數(shù)定義文件;所述中轉(zhuǎn)函數(shù)用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用^見范(Remoting)才各式,并將遠(yuǎn)程方法調(diào)用^L范(Remoting)格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果,并對(duì)遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。本發(fā)明實(shí)施例提供的非托管語言與.NET服務(wù)端交互方法、裝置、系統(tǒng)及生成方法和裝置,通過提取.NET服務(wù)端中可執(zhí)行文件的遠(yuǎn)程調(diào)用信息,生成非托管語言的函數(shù)聲明文件和函數(shù)定義文件,并在函數(shù)定義文件中寫入中轉(zhuǎn)函數(shù)。中轉(zhuǎn)函數(shù)主要用來將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式,并將遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;中轉(zhuǎn)函數(shù)在接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果后,對(duì)遠(yuǎn)程方法調(diào)用規(guī)范(Remoting)格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值,并將所述返回值返回給所述客戶端。在非托管語言需要訪問.NET服務(wù)端時(shí),需要將上述函數(shù)聲明文件和函數(shù)定義文件寫入非托管語言的工程,以便在運(yùn)行非托管語言程序時(shí)能夠通過中轉(zhuǎn)函數(shù)的功能調(diào)用.NET服務(wù)端服務(wù),使得非托管語言能夠與.NET服務(wù)端進(jìn)行交互實(shí)現(xiàn)遠(yuǎn)程調(diào)用,解決了非托管語言程序調(diào)用.NET服務(wù)端服務(wù)存在局限性的問題。實(shí)施例2:下面結(jié)合一個(gè)具體的例子描述本發(fā)明非托管語言與.NET服務(wù)端進(jìn)行通信的過程,以及進(jìn)行通信所需要裝置的制作過程和具體使用方法。本實(shí)施例中的.NET服務(wù)端為.NET服務(wù)端卡,非托管語言為C語言;在實(shí)際運(yùn)用時(shí),可以采用.NET服務(wù)端服務(wù)器作為.NET服務(wù)端,采用其他非托管語言,本實(shí)施例并不做限定。如圖6所示,具體過程包括;601、在制作.NET服務(wù)端卡時(shí),需要編譯.NET服務(wù)端程序集,并在編譯過程中為.NET服務(wù)端程序集添加強(qiáng)命名,得到添加強(qiáng)命名的可執(zhí)行文件。通常,可執(zhí)行文件中包含有標(biāo)準(zhǔn)的可執(zhí)行文件信息、代碼和元數(shù)據(jù)表等,其中,標(biāo)準(zhǔn)的可執(zhí)行文件信息是指可執(zhí)行文件中標(biāo)準(zhǔn)的PE(PortableExecutable)文件頭和無用區(qū)塊表,該P(yáng)E(PortableExecutable)文件頭可以用來識(shí)別當(dāng)前文件為可執(zhí)行文件,無用區(qū)塊表是指存儲(chǔ).NET服務(wù)端卡不支持的資源的區(qū)塊表,該資源如Windows的窗體、圖標(biāo)等等;元數(shù)據(jù)表中包含有各種數(shù)據(jù),包括類、參數(shù)和函數(shù)等等。其中,強(qiáng)命名用于防止可執(zhí)行文件被篡改和版本控制,在編譯的過程中由編譯器提供,添加強(qiáng)命名后主機(jī)生成密鑰對(duì),包括一個(gè)公鑰、一個(gè)私鑰,然后由主機(jī)對(duì)程序集進(jìn)行特定算法的Hash運(yùn)算,得到該程序集的文件散列值,使用私鑰對(duì)該文件散列值進(jìn)行加密得到密文,該Hash值的密文及公鑰存儲(chǔ)于可執(zhí)行文件的清單中,并且私鑰不可見。強(qiáng)命名程序集包含文件名、版本號(hào)、語言文化信息及公鑰標(biāo)識(shí)。添加強(qiáng)命名的過程主要包括1、獲取強(qiáng)命名實(shí)用工具SN.exe,其中,SN.exe為耀:軟2005自帶工具;2、編寫命令SN-kMyServer.exe,并將該命令告知實(shí)用工具SN.exe;3、創(chuàng)建MyServer.exe文4牛,其中創(chuàng)建MyServer.exe文4牛的過禾呈中生成一對(duì)以二進(jìn)制格式存儲(chǔ)的公鑰和私鑰;4、將System.Reflection.AssemblyKeyFileAttribute特性應(yīng)用到MyServer.exe程序集j5、通過編譯器進(jìn)行編譯,當(dāng)編譯器在源代碼中遇到所述特性時(shí),將打開其中制定的文件MyServer.exe,用私鑰對(duì)程序集簽名,并將公鑰嵌入清單中。添加強(qiáng)命名的可執(zhí)行文件一個(gè)具體實(shí)例如圖7所示。其中,上述為程序集添加強(qiáng)命名的第3步中得到公鑰,由于第3步得到的公鑰占用空間較多,本發(fā)明實(shí)施例中故對(duì)公鑰進(jìn)行HASH運(yùn)算,得到該公鑰的散列值即公鑰標(biāo)識(shí)(publickeytoken)。本實(shí)施例中即為,HASH(公鑰)=公鑰標(biāo)識(shí),并且在公鑰標(biāo)識(shí)需要使用時(shí)才計(jì)算得到,不進(jìn)行預(yù)先計(jì)算存儲(chǔ)。上述為程序集添加強(qiáng)命名的實(shí)現(xiàn)過程以及各文件名,具體見本實(shí)施例如下程序集程序MyServer.csNamespaceMyNameSpaceClassMyServer{PublicintMySample(inta,intb)Returna+b',602、將編譯并添加強(qiáng)命名后得到的可執(zhí)行文件下載到.NET服務(wù)端卡;如上面的舉例所示,將原程序MyServer.cs編譯后得到的可扭^亍文件MyServ6r.6X6下載到.NET服務(wù)端卡中,其中可執(zhí)行文件清單中存儲(chǔ)有公鑰及私鑰簽名后的程序MyServer.cs的散歹lK直。通過上述601和602過程,已經(jīng)完成了.NET服務(wù)端卡的制作,但是為了佳_得采用C語言等非托管語言的客戶端能夠與.NET服務(wù)端卡進(jìn)行通信,本發(fā)明實(shí)施例還需要生成非托管語言與.NET服務(wù)端卡的交互裝置,具體的生成過程見后續(xù)步驟。603、獲取上述可執(zhí)行文件的遠(yuǎn)程調(diào)用信息,可執(zhí)行文件遠(yuǎn)程調(diào)用信息具體包括公鑰標(biāo)識(shí)、命名空間、遠(yuǎn)程類類名、函數(shù)名;程序在編譯后得到的可執(zhí)行文件元數(shù)據(jù)表中包含完整的命名空間、類名、函數(shù)名等信息,如本實(shí)施例圖7舉例所示,程序MyServer.cs編譯后得到的可執(zhí)行文件的元數(shù)據(jù)表中包含完整的命名空間MyNameSpace、類名MyServer及函數(shù)名MySample,又本實(shí)施例中,程序MyServer.cs編譯后得到的可執(zhí)行文件添加了強(qiáng)命名,并對(duì)添加強(qiáng)命名后生成的公鑰進(jìn)行HASH運(yùn)算得到公鑰標(biāo)識(shí),則可14以獲取的本實(shí)施例中可執(zhí)行文件的遠(yuǎn)程調(diào)用信息公鑰標(biāo)識(shí)、命名空間、遠(yuǎn)程類類名、函數(shù)名具體為publickeytoken、MyNameSpace、MyServer、MySample。由上述可知.NET服務(wù)端程序被編譯后,所有遠(yuǎn)程調(diào)用信息存放于元數(shù)據(jù)表中。其中元數(shù)據(jù)表在原有的PE文件格式的基礎(chǔ)上擴(kuò)展而來,由一個(gè)新的數(shù)據(jù)目錄存放,該數(shù)據(jù)目錄稱為IMAGE_COR-HEADER。則在獲取7>鑰標(biāo)識(shí)、命名空間和類名、函數(shù)名時(shí)需要打開文件做映射,然后分析PE格式找到IMAGE_COR-HEADER目錄偏移;具體代碼如下PBYTEpFilejIMAGE-DOS_HEADER*pDos=pFile;IMAGE—NT—HEADERS*pNtHeader=ImageGetNTHeader(pDos);IMAGE—COR20—HEADER*pCorHeader=ImageGetCorHeader(pNtHeader);獲取并Strings流的偏移PBYTEpMetas=亂L;PBYTEpStrings=NULL;IMAGE—COR—STREAM—HEADER*pStream;進(jìn)行Rva地址到Raw地址的轉(zhuǎn)換pMetas=pDos+RvaToRaw(pCorHeader-〉MetaData.VirtualAddress);pStream=ImageStreamHeader("#Strings,,);pStrings=pMetas+pStream-H0ffset;下面舉一個(gè)例子說明獲取可執(zhí)行文件中7>鑰標(biāo)識(shí)、命名空間和類名、函邀:名的過程;在元數(shù)據(jù)表中獲取遠(yuǎn)程調(diào)用信息需要從所述可執(zhí)行文件的數(shù)據(jù)流中獲取遠(yuǎn)程調(diào)用信息每個(gè)數(shù)據(jù)的偏移地址和數(shù)據(jù)體長(zhǎng)度,然后根據(jù)偏移地址和數(shù)據(jù)體長(zhǎng)度分別讀取遠(yuǎn)程調(diào)用信息的每個(gè)數(shù)據(jù)。具體的執(zhí)行過程包括1、獲取數(shù)據(jù)流中其中一個(gè)數(shù)據(jù)的偏移地址、數(shù)據(jù)體長(zhǎng)度;2、根據(jù)上述偏移地址及數(shù)據(jù)體長(zhǎng)度獲取第一位數(shù)據(jù);3、獲取下一個(gè)數(shù)據(jù)的偏移地址、數(shù)據(jù)體長(zhǎng)度,4、根據(jù)偏移地址、數(shù)據(jù)體長(zhǎng)度獲取下一位數(shù)據(jù)。上述獲取數(shù)據(jù)的過程是一個(gè)循環(huán)的過程,直到獲取所需的全部數(shù)據(jù)才完成。假設(shè)在伴Blob流中存》文^^鑰標(biāo)識(shí)的字符串,在并Strings中存放命名空間、類名、函數(shù)名的字符串;其獲取元數(shù)據(jù)表中存儲(chǔ)偏移列的值的實(shí)現(xiàn)代碼如下PBYTEpAssemName=亂L;DWORDdwCol=0;獲取元數(shù)據(jù)表中程序集名稱;dwCol=GetRowCol(0x20/*Metatable_Assembly*/,5/*Assembly.Name*/);pAssemName=pStrings+dwCol;獲取類名和命名空間的方法,與上雷同PBYTEpPkToken=NULL;PBYTEpNameSpace=NULL;PBYTEpMetho衡me=NULL;604、才艮據(jù)步驟601中得到的/>鑰標(biāo)識(shí)(publickeytoken)、命名空間MyNameSpace、類名MyServer生成C語言中函數(shù)聲明文件(.H文件);其中,生成的.H文件具體為定義宏、定義函數(shù)如本實(shí)施例舉例所示,以代碼實(shí)現(xiàn)如下用上述獲取遠(yuǎn)程調(diào)用信息,構(gòu)建.H文件HANDLEhFile=NULL;hFile=CreateFile(pAssemName,CREATE—FILE,…);1、寫頭文件引用定義BYTEszTemp[250]={0};/*#include<windows.h>*/WriteFile(hFile,"#include〈windows.h>");/*#defineASSEMBLY"MYSERVER"*/Wsprintf(szTemp,"#defineASSEMBLY"%s"",pAssemName);WriteFile(hFile,szTemp);/*#defineMETHODNAME"MySample"*/Wsprintf(szTemp,,,#defineMETHODNAMEIs",,,pMethodName);WriteFile(hFile,szTemp);2、寫入函數(shù)聲明/*intMySample(inta,intb);*/Wsprintf(szTemp,"int%s(inta,intb);",pMethodName);WriteFile(hFUe,szTemp);生成的.H文件如下#include<windows.h>#defineASSEMBLY"MYSERVER"#definePKTOKEN"123456789"#defineNAMESPACE"MyNameSpace.MyServer"#defineMETHODNAME"MySample"intMySample(inta,intb);上述.H文件由.NET服務(wù)端卡開發(fā)商提供,與.NET服務(wù)端卡一起發(fā)送給.NET服務(wù)端卡用戶。605、根據(jù)步驟604中生成函數(shù)定義文件中定義的函數(shù)名生成C語言程序函數(shù)定義文件(.C文件),并在其中加入中轉(zhuǎn)函數(shù)Trans,建立.NET服務(wù)端卡與調(diào)用.NET服務(wù)端卡的程序之間的通道;其中,生成的函數(shù)定義文件(.C文件)具體即為生成函數(shù),以代碼實(shí)現(xiàn)如下#include"myfile.h"intMySample(inta,intb){Intparams[2]={a,b};Intret;Returnret;實(shí)際應(yīng)用中,C語言程序還可以被其他非托管語言程序代替,只是由于C語言比較常用,本實(shí)施例以C語言程序?yàn)槔?。上述的中轉(zhuǎn)函數(shù)主要用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為Retnoting(遠(yuǎn)程方法調(diào)用規(guī)范)格式,并將Remoting格式的訪問請(qǐng)求發(fā)送到.NET月良務(wù)端;接收.NET服務(wù)端返回的Remoting格式的運(yùn)行結(jié)果,并對(duì)Remoting格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。具體而言中轉(zhuǎn)函數(shù)Trans需要將訪問請(qǐng)求中的訪問參數(shù)打包,并緩存為Remoting格式,這里的訪問參數(shù)主要包括"^鑰標(biāo)識(shí)Publickeytoken、命名空間、類名、函數(shù)名、參數(shù)和返回值的地址等;打包之后通過Remoting才各式將參數(shù)發(fā)送至.NET服務(wù)端卡,.NET服務(wù)端卡對(duì)接收到訪問請(qǐng)求中的參數(shù)進(jìn)行運(yùn)行,并返回運(yùn)行結(jié)果,所述中轉(zhuǎn)函數(shù)還需要接收.NET服務(wù)端卡通過Remoting格式返回的運(yùn)行結(jié)果,并解析Remoting格式的運(yùn)行結(jié)果,從中取出返回值,然后將返回值發(fā)送給客戶端。當(dāng)然,一般情況下在進(jìn)行打包之前還需要對(duì)客戶端進(jìn)行身份驗(yàn)證,在身份驗(yàn)證通過后才進(jìn)行后續(xù)梯:作,以保證能夠本次訪問時(shí)安全的。中轉(zhuǎn)函數(shù)具體由.NET服務(wù)端卡開發(fā)商提供,大體格式如下Trans(............)Pack(ASSEMBLY,PKT0KEN,薩ESPACE,MET膽MME,params);Buffer(Remoting格式);Send(.NET服務(wù)端Card);接收BufferRemoting解析;Ret;將中轉(zhuǎn)函數(shù)寫入函數(shù)定義文件中,生成的函數(shù)定義文件(.C)文件具體代碼如下#include"myfile.h"intMySample(inta,intb){Intparams[2]={a,b};Intret;Trans(ASSEMBLY,PKTOKEN,NAMESPACE,MET廳國(guó)E,params,&ret);Returnretj上述.C文件由.NET服務(wù)端卡開發(fā)商提供,與.NET服務(wù)端卡一起發(fā)送給.NET服務(wù)端卡用戶。606、上述603至605的過程中完成了非托管語言與.NET服務(wù)端卡交互裝置的制作過程,.NET服務(wù)端卡用戶如果通過非托管語言的客戶端進(jìn)行訪問時(shí),需要下載上述.H和.C文件,并將.H文件和.C文件加入需要調(diào)用.NET服務(wù)端卡的C語言程序的工程中;具體地,是在.NET服務(wù)端卡開發(fā)商將.H文件、.C文件及.NET服務(wù)端卡一同發(fā)送給.NET服務(wù)端卡用戶后,由.NET服務(wù)端卡用戶在需要調(diào)用.NET服務(wù)端卡時(shí),將其接收到的.H文件、.C文件寫入其需要調(diào)用.NET服務(wù)端卡的C語言工程中,以便實(shí)現(xiàn).NET服務(wù)端卡的應(yīng)用。607、運(yùn)行C語言程序調(diào)用.NET服務(wù)端卡。采用上述方案后,通過C語言調(diào)用.NET服務(wù)端卡的具體過程如下運(yùn)行C語言程序前,首先通過可執(zhí)行文件清單中存儲(chǔ)的公鑰,驗(yàn)證該清單中存儲(chǔ)的私鑰簽名后的可執(zhí)行文件的Hash值,驗(yàn)證通過后運(yùn)行該C語言程序。當(dāng)運(yùn)行到調(diào)用.NET服務(wù)端卡處時(shí),將訪問請(qǐng)求中的訪問參數(shù)打包,并緩存為Remoting格式,這里的訪問參數(shù)主要包括/>鑰標(biāo)識(shí)Publickeytoken、命名空間、類名、函數(shù)名、參數(shù)和返回值的地址等;打包之后通過Remoting格式將參數(shù)發(fā)送至.NET服務(wù)端卡,.NET服務(wù)端卡對(duì)接收到訪問請(qǐng)求中的參數(shù)進(jìn)行運(yùn)行,并返回運(yùn)行結(jié)果,所述中轉(zhuǎn)函數(shù)還需要接收.NET服務(wù)端卡通過Remoting格式返回19的運(yùn)行結(jié)果,并解析Remoting格式的運(yùn)行結(jié)果,從中取出返回值,然后將返回值發(fā)送給客戶端,返回客戶端的過程可以是將返回值賦予.NET服務(wù)端地址中,然后由MySample返回。上述具體實(shí)現(xiàn)過程的代碼實(shí)現(xiàn)如下代碼實(shí)現(xiàn)Remoting打包Reraoting—Serialize(CHAR*szAssem,CHAR*pk丁oken,CHAR*szNameSpace,CHAR*szName,VOID*Params)BYTEpBuff[1024]={0};構(gòu)造RemotingHeader:Remoting—Serialize_Header(pBuff,szAssem,pkToken,szNameSpace,szName);構(gòu)造參數(shù)Object:Remoting—Serialize—Object(pBuff,Params);Remoting的解包R函ting-Serialize(PBYTEpBuff,VOID*Params,VOID*Ret)返回值的參數(shù)個(gè)數(shù)DWORDdwParams=0;角罕析RemotingHeader:Remoting-Deserialize—Header(pBuff,&dwParams);解析返回值的參數(shù),和返回值Remoting—Serialize_0bject(pBuff,Params,dwParams,Ret);本發(fā)明實(shí)施例提供的非托管語言與.NET服務(wù)端交互方法、裝置、系統(tǒng)及生成方法和裝置,通過提取.NET服務(wù)端中可執(zhí)行文件的遠(yuǎn)程調(diào)用信息,生成非托管語言的函數(shù)聲明文件和函數(shù)定義文件,并在函數(shù)定義文件中寫入中轉(zhuǎn)函數(shù)。中轉(zhuǎn)函數(shù)主要用來將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為Remoting格式,并將Remoting格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;中轉(zhuǎn)函數(shù)在接收.NET服務(wù)端返回的Remoting格式的運(yùn)行結(jié)果后,對(duì)Remoting格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值,并將所述返回值返回給所述客戶端。在非托管語言需要訪問.NET服務(wù)端時(shí),需要將上述函數(shù)聲明文件和函數(shù)定義文件寫入非托管語言的工程,以便在運(yùn)行非托管語言程序時(shí)能夠,能夠通過中轉(zhuǎn)函數(shù)的功能調(diào)用.NET服務(wù)端的服務(wù),使得非托管語言能夠與.NET服務(wù)端進(jìn)行交互實(shí)現(xiàn)遠(yuǎn)程調(diào)用,解決了非托管語言程序調(diào)用.NET服務(wù)端的服務(wù)存在局限性的問題。實(shí)施例3:本發(fā)明實(shí)施例還提供一種非托管語言與.NET服務(wù)端交互裝置,如圖8所示,該交互裝置包括驗(yàn)證單元81、轉(zhuǎn)換單元82、發(fā)送單元83、接收單元84、解析單元85、返回單元86。其中,驗(yàn)證單元81用于對(duì)所述客戶端進(jìn)行身份驗(yàn)證,具體而言就是通過可執(zhí)行文件清單中存儲(chǔ)的公鑰,驗(yàn)證該清單中存儲(chǔ)的私鑰簽名后的可執(zhí)行文件的Hash值;所述轉(zhuǎn)換單元82在客戶端通過身份驗(yàn)證之后,將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為Remoting(遠(yuǎn)程方法調(diào)用規(guī)范)格式;然后通過發(fā)送單元83將Remoting格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;.NET服務(wù)端運(yùn)行訪問請(qǐng)求相應(yīng)的操作后返回運(yùn)行結(jié)果,所述接收單元84用于接收.NET服務(wù)端返回的Reinoting格式的運(yùn)行結(jié)果;然后通過解析單元85對(duì)Remoting格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;所述返回單元86用于將所述返回值返回給所述客戶端。本發(fā)明實(shí)施例還提供一種非托管語言與.NET服務(wù)端交互系統(tǒng),如圖9所示,該系統(tǒng)包括客戶端91、.NET服務(wù)端92;為了保證非托管語言的客戶端能夠與.NET服務(wù)端通信,本發(fā)明實(shí)施例中還包括非托管語言與.NET服務(wù)端交互裝置93;—般來講,本實(shí)施例中.NET服務(wù)端可以為.NET服務(wù)端卡或者.NET服務(wù)端服務(wù)器。其中,所述客戶端91用于向所述.NET服務(wù)端92發(fā)起非托管語言訪問請(qǐng)求,為了能夠訪問.NET服務(wù)端92,本發(fā)明實(shí)施例中的客戶端需要在該訪問請(qǐng)求所在文件引用所述交互裝置對(duì)應(yīng)的函數(shù)定義文件和函數(shù)聲明文件。為了保證客戶端是合法訪問,本發(fā)明實(shí)施例中非托管語言與.NET服務(wù)端交互裝置93還用于對(duì)所述客戶端91進(jìn)行身份驗(yàn)證,具體實(shí)現(xiàn)可以通過可執(zhí)行文件清單中存儲(chǔ)的^^鑰,驗(yàn)證該清單中存儲(chǔ)的私鑰簽名后的可執(zhí)行文件的Hash值。所述非托管語言與.NET服務(wù)端交互裝置93還用于在上述驗(yàn)證通過后,將所述訪問請(qǐng)求轉(zhuǎn)換為Remoting格式,然后將Remoting格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端92;所述.NET服務(wù)端92接收到訪問請(qǐng)求后運(yùn)行所述訪問請(qǐng)求,并將運(yùn)行結(jié)果反饋給非托管語言與.NET服務(wù)端交互裝置93;所述非托管語言與.NET服務(wù)端交互裝置93還用于接收.NET服務(wù)端92返回的Remoting格式的運(yùn)行結(jié)果,然后對(duì)Remoting格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值,并將所述返回值返回給所述客戶端91。本發(fā)明實(shí)施例還提供一種非托管語言與.NET服務(wù)端交互裝置的生成裝置,如圖IO所示,該生成裝置包括獲取單元11、第一生成單元12、第二生成單元13和加入單元14。其中,獲取單元11用于獲取被下載到.NET服務(wù)端中的可執(zhí)行文件的遠(yuǎn)程調(diào)用信息;第一生成單元12用于根據(jù)所述遠(yuǎn)程調(diào)用信息中的公鑰標(biāo)識(shí)、命名空間和遠(yuǎn)程類類名生成非托管語言對(duì)應(yīng)的函數(shù)聲明文件;第二生成單元13用于才艮據(jù)第一生成單元12生成的非托管語言對(duì)應(yīng)的函數(shù)聲明文件中的函數(shù)名生成非托管語言對(duì)應(yīng)的函數(shù)定義文件;加入單元14用于將預(yù)先定義的中轉(zhuǎn)函數(shù)加入所述函22數(shù)定義文件;所述中轉(zhuǎn)函數(shù)用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為Remoting格式,并將Remoting格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的Remoting格式的運(yùn)行結(jié)果,并對(duì)Remoting格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。上述獲取單元11具體實(shí)現(xiàn)方式如下,該獲取單元11包括獲取模塊111和讀取模塊112。其中,獲取模塊111用于從所述可執(zhí)行文件的數(shù)據(jù)流中獲取遠(yuǎn)程調(diào)用信息每個(gè)數(shù)據(jù)的偏移地址和數(shù)據(jù)體長(zhǎng)度;讀取模塊112用于根據(jù)偏移地址和數(shù)據(jù)體長(zhǎng)度分別讀取遠(yuǎn)程調(diào)用信息的每個(gè)數(shù)據(jù)。本發(fā)明實(shí)施例主要用在各種采用非托管語言的客戶端中,用來通過該客戶端順利訪問.NET服務(wù)端。通過以上的實(shí)施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在可讀取的存儲(chǔ)介質(zhì)中,如計(jì)算機(jī)的軟盤,硬盤或光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所迷的方法。以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本
技術(shù)領(lǐng)域:
的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。權(quán)利要求1、一種非托管語言與.NET服務(wù)端交互方法,其特征在于,包括將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式;將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果;對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。2、根據(jù)權(quán)利要求1所述的非托管語言與.NET服務(wù)端交互方法,其特征在于,所述訪問請(qǐng)求中包括訪問參數(shù)。3、根據(jù)權(quán)利要求1所述的非托管語言與.NET服務(wù)端交互方法,其特征在于,在將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式之前,該方法還包4舌對(duì)所述客戶端進(jìn)行身份驗(yàn)證;所述將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式為在所述客戶端通過身份驗(yàn)證之后,將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式。4、一種非托管語言與.NET服務(wù)端交互裝置,其特征在于,包括轉(zhuǎn)換單元,用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式;發(fā)送單元,用于將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收單元,用于接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果;解析單元,用于對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;返回單元,用于將所述返回值返回給所述客戶端。5、根據(jù)權(quán)利要求4所述的非托管語言與.NET服務(wù)端交互裝置,其特征在于,還包括驗(yàn)證單元,用于對(duì)所述客戶端進(jìn)行身^f分驗(yàn)證;所述轉(zhuǎn)換單元在客戶端通過身份驗(yàn)證之后,將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式。6、一種非托管語言與.NET服務(wù)端交互系統(tǒng),包括客戶端、.NET服務(wù)端;其特征在于,還包括非托管語言與.NET服務(wù)端交互裝置;所述客戶端用于向所述.NET服務(wù)端發(fā)起非托管語言訪問請(qǐng)求;所述非托管語言與.NET服務(wù)端交互裝置用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式,并將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;所述.NET服務(wù)端用于運(yùn)行所述訪問請(qǐng)求;所述非托管語言與.NET服務(wù)端交互裝置還用于接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果;對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。7、根據(jù)權(quán)利要求6所述的非托管語言與.NET服務(wù)端交互系統(tǒng),其特征在于,所述非托管語言與.NET服務(wù)端交互裝置還用于對(duì)所述客戶端進(jìn)行身份驗(yàn)證。8、根據(jù)權(quán)利要求6所述的非托管語言與.NET服務(wù)端交互系統(tǒng),其特征在于,所述非托管語言訪問請(qǐng)求所在文件引用了所述交互裝置對(duì)應(yīng)的函數(shù)定義文件和函數(shù)聲明文件。9、根據(jù)權(quán)利要求6、7或8所述的非托管語言與.NET服務(wù)端交互系統(tǒng),其特征在于,所述.NET服務(wù)端為.NET服務(wù)端卡或者.NET服務(wù)端服務(wù)器。10、一種非托管語言與.NET服務(wù)端交互裝置的生成方法,其特征在于,包括獲取被下載到.NET服務(wù)端中的可執(zhí)行文件的遠(yuǎn)程調(diào)用信息;根據(jù)所述遠(yuǎn)程調(diào)用信息中的公鑰標(biāo)識(shí)、命名空間和遠(yuǎn)程類類名生成非托管語言對(duì)應(yīng)的函數(shù)聲明文件;根據(jù)生成的所述非托管語言對(duì)應(yīng)的函數(shù)聲明文件中的函數(shù)名生成非托管語言對(duì)應(yīng)的函數(shù)定義文件;將預(yù)先定義的中轉(zhuǎn)函數(shù)加入所述函數(shù)定義文件;所述中轉(zhuǎn)函數(shù)用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式,并將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果,并對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。11、根據(jù)權(quán)利要求10所述的非托管語言與.NET服務(wù)端交互裝置的生成方法,其特征在于,所述非托管語言訪問請(qǐng)求所在文件引用了所述函數(shù)定義文件和函數(shù)聲明文件。12、根據(jù)權(quán)利要求10所述的非托管語言與.NET服務(wù)端交互裝置的生成方法,其特征在于,所述獲取被下載到.NET服務(wù)端中的可執(zhí)行文件的遠(yuǎn)程調(diào)用信息包括從所述可執(zhí)行文件的數(shù)據(jù)流中獲取遠(yuǎn)程調(diào)用信息每個(gè)數(shù)據(jù)的偏移地址和數(shù)據(jù)體長(zhǎng)度;根據(jù)偏移地址和數(shù)據(jù)體長(zhǎng)度分別讀取遠(yuǎn)程調(diào)用信息的每個(gè)數(shù)據(jù)。13、一種非托管語言與.NET服務(wù)端交互裝置的生成裝置,其特征在于,包括獲取單元,用于獲取4皮下載到.NET服務(wù)端中的可執(zhí)行文件的遠(yuǎn)程調(diào)用信息;第一生成單元,用于根據(jù)所述遠(yuǎn)程調(diào)用信息中的公鑰標(biāo)識(shí)、命名空間和遠(yuǎn)程類類名生成非托管語言對(duì)應(yīng)的函數(shù)聲明文件;第二生成單元,用于根據(jù)所述第一生成單元生成的非托管語言對(duì)應(yīng)的函數(shù)聲明文件中的函數(shù)名生成非托管語言對(duì)應(yīng)的函數(shù)定義文件;加入單元,用于將預(yù)先定義的中轉(zhuǎn)函數(shù)加入所述函數(shù)定義文件;所述中轉(zhuǎn)函數(shù)用于將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式,并將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果,并對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。14、根據(jù)權(quán)利要求13所述的非托管語言與.NET服務(wù)端交互裝置的生成裝置,其特征在于,所述獲取單元包括獲取模塊,用于從所述可執(zhí)行文件的數(shù)據(jù)流中獲取遠(yuǎn)程調(diào)用信息每個(gè)數(shù)據(jù)的偏移地址和數(shù)據(jù)體長(zhǎng)度;讀取模塊,用于根據(jù)偏移地址和數(shù)據(jù)體長(zhǎng)度分別讀取遠(yuǎn)程調(diào)用信息的每個(gè)數(shù)據(jù)。全文摘要本發(fā)明公開了一種非托管語言與.NET服務(wù)端交互及其生成方法、裝置、系統(tǒng),涉及計(jì)算機(jī)
技術(shù)領(lǐng)域:
,解決了現(xiàn)有技術(shù)中非托管語言不能與.NET服務(wù)端進(jìn)行通信的問題。本發(fā)明實(shí)施例將客戶端發(fā)起的非托管語言訪問請(qǐng)求轉(zhuǎn)換為遠(yuǎn)程方法調(diào)用規(guī)范格式;將遠(yuǎn)程方法調(diào)用規(guī)范格式的訪問請(qǐng)求發(fā)送到.NET服務(wù)端;接收.NET服務(wù)端返回的遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果;對(duì)遠(yuǎn)程方法調(diào)用規(guī)范格式的運(yùn)行結(jié)果進(jìn)行解析得到返回值;將所述返回值返回給所述客戶端。本發(fā)明實(shí)施例主要用在各種采用非托管語言的客戶端中,用來通過該客戶端順利訪問.NET服務(wù)端。文檔編號(hào)G06F9/44GK101674333SQ20091023551公開日2010年3月17日申請(qǐng)日期2009年9月29日優(yōu)先權(quán)日2009年9月29日發(fā)明者于華章,舟陸申請(qǐng)人:北京飛天誠(chéng)信科技有限公司