日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

解讀非托管COM組件的使用_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:解說(shuō)ASP.NET中的session存儲(chǔ)模式運(yùn)用
在asp.net中的Session存儲(chǔ)方式不象asp那樣單一,一共提供了三種存儲(chǔ)方式,由于最近一個(gè)2000多人使用的web軟件出現(xiàn)了故障,用戶每天早上在某一時(shí)刻出現(xiàn)難以登陸現(xiàn)象,接著Session丟值出現(xiàn),只有重啟IIS,或機(jī)器.這時(shí)程序恢復(fù)正常了.整天都不會(huì)出現(xiàn)同樣的問(wèn)題

      asp.net是基于通用語(yǔ)言運(yùn)行庫(kù)創(chuàng)建的,也就是所謂的托管執(zhí)行環(huán)境。生成的代碼稱為托管代碼。編譯器能夠從源代碼的描述中產(chǎn)生元數(shù)據(jù)信息,而運(yùn)行庫(kù)又從元數(shù)據(jù)中獲得托管代碼的信息。而我們編寫的組件一般是在非托管環(huán)境下創(chuàng)建的,這些組件往往不包含元數(shù)據(jù)信息,那么我們?cè)趺丛谕泄艽a中使用這些元數(shù)據(jù)信息呢?

      為了在托管環(huán)境中使用非托管代碼,我們首先必須手工為這些現(xiàn)有的組件產(chǎn)生元數(shù)據(jù)信息。必須有一種工具能夠產(chǎn)生元數(shù)據(jù)。能夠從某個(gè)地方獲得元數(shù)據(jù)。這個(gè)元數(shù)據(jù)的發(fā)源地就是類型庫(kù),事實(shí)上,今天所有的組件都有一個(gè)類型庫(kù)。

      這里為了說(shuō)明如何產(chǎn)生元數(shù)據(jù)信息,我們不妨以Microsoft Agent組件為例進(jìn)行說(shuō)明。這個(gè)組件類似于Office的小助手,它能夠完成各種豐富多彩的人性化的動(dòng)作,并且支持語(yǔ)音識(shí)別和語(yǔ)音合成。一般的操作系統(tǒng) 都默認(rèn)安裝了這個(gè)組件,用戶該不會(huì)發(fā)愁沒有這個(gè)組件吧。如果你的系統(tǒng)刪除了這個(gè)組件,你可以到http://microsoft.com/msagent/downloads.htm去下載。下面開始介紹如何在asp.net中使用非托管COM組件。

      1、首先是創(chuàng)建元數(shù)據(jù)

      Microsoft Agent控件默認(rèn)是安裝在%systemroot%\msagent\目錄下,首先運(yùn)行開始菜單中Visual Studio.NET Command Prompt(命令提示)菜單項(xiàng)。在這個(gè)目錄執(zhí)行下面的命令。

      tlbimp agentctl.dll /out: agentctl_proxy.dll

      通過(guò)這個(gè)命令我們可以創(chuàng)建一個(gè)包含元數(shù)據(jù)信息的代理文件agentctl_proxy.dll。注意這并不是一個(gè)真正的動(dòng)態(tài)連接庫(kù)文件,而是一個(gè)裝配文件(Assembly),也就是我們非托管COM組件的代理。也可以通過(guò).NET框架提供的實(shí)用程序aximp.exe創(chuàng)建,命令行如下,這樣它會(huì)生成兩個(gè)文件,如下圖所示:注意AgentObjects.dll 和agentctl_proxy.dll文件是完全一樣的文件。

     C:\Program Files\Microsoft Visual Studio 9.0\VC>aximp %systemroot%\msagent\agentctl.dll

      2、安裝到asp.net中

      把元數(shù)據(jù)文件安裝到asp.net 環(huán)境中有兩種辦法:

      一是把文件復(fù)制到應(yīng)用程序的BIN目錄。

      二是把它復(fù)制到asp.net目錄。

      第二種方法有一個(gè)缺陷,你必須在每一個(gè)使用組件的asp.net頁(yè)面插入一個(gè)@Assembly語(yǔ)句。而保存到Bin目錄則可以避免這一點(diǎn)。assembly將會(huì)被加載到應(yīng)用程序的所有asp.net頁(yè)面。因此我們最好還是把它放在bin目錄。

      3、IL反匯編(Disassembler)

      現(xiàn)在基本上到了令大多數(shù)VB或VBScript程序員頭疼的時(shí)候了,我們要利用一個(gè)反匯編器產(chǎn)生一些重要信息。

      Assembly 的名稱空間(使用 @Import 語(yǔ)句)

      精確的類名(這可能與ASP有著很大的不同!)

      方法和屬性的數(shù)據(jù)類型

      方法和屬性的精確拼寫。注意在 C# 中 Bodytext 和 BodyText是兩個(gè)完全不同的變量。

      產(chǎn)生上述信息需要使用IL (Intermediate Language) Disassembler中間語(yǔ)言反匯編器,你可以在生成元數(shù)據(jù)后,鍵入ildasm.exe啟動(dòng)該工具。然后可以利用 File | Open,選擇相應(yīng)的文件,顯示的結(jié)果非常類似于OLE/COM查看器獲得結(jié)果。

      注意生成的匯編文件不一樣,名稱空間的名稱也不一樣,在asp.net頁(yè)面往往需要使用 @Import 導(dǎo)入名稱空間,不過(guò)它們的類、屬性、方法都是一樣的。對(duì)于asp.net程序員來(lái)說(shuō),整個(gè)藍(lán)色的符號(hào)都是很重要的,因?yàn)樗鼈儽硎镜氖且粋(gè)類或者是一個(gè)接口。如果我們對(duì)這些類或者接口進(jìn)行展開,我們會(huì)獲得一系列屬性和方法的列表。

      我們看到的所有方法都有一個(gè)精確的數(shù)據(jù)類型描述。首先是方法名稱,冒號(hào)后面是返回值類型圓括號(hào)中是方法需要的參數(shù)。當(dāng)我們談及用get_ 和set_方法描述屬性的時(shí)候,VBScript程序員可能會(huì)一頭霧水,我們知道每一個(gè)屬性實(shí)際上是對(duì)應(yīng)于類中的一個(gè)私有成員,屬性的讀寫分別是通過(guò)這兩個(gè)函數(shù)實(shí)現(xiàn)的。每一個(gè)屬性旁邊都有一個(gè)紅色的標(biāo)記,雙擊這個(gè)屬性,我們可以獲得屬性的定義,我們可以看到屬性可以為Get, Set 或者 Get/Set。

      4、組件的使用

      當(dāng)我們對(duì)元數(shù)據(jù)了解清楚以后,剩下的工作就是如何在asp.net 中使用這個(gè)組件,下面是一段使用MsAgent的代碼:

<% @Page Language="C#" %>

<% @Import Namespace="AgentObjects" %>

<% AxAgentObjects.AxAgent AxAgent=new AxAgentObjects.AxAgent();

IAgentCtlCharacterEx Character;

AxAgent.Characters.Load("Genie",(object)"GENIE.ACS");

Character = AxAgent.Characters["Genie"];

Character.LanguageID = 0x409;

// Display the character. Character.Show(null);

Character.Speak(“Hello World”, null);

Response.Write(Character.Name);

Character.Play("Wave");

Character.Play("Hide");

%>

      當(dāng)導(dǎo)入類型庫(kù)以后,接著我們要?jiǎng)?chuàng)建這個(gè)類的實(shí)例,剩下的使用方法基本上和ASP應(yīng)用組件差不多。

      所有的COM組件調(diào)用的方法基本上相同,正如在托管應(yīng)用程序(C#、Visual Basic.NET)加入一個(gè)COM組件引用,接著系統(tǒng)要為這些非托管代碼生成一個(gè)封裝,實(shí)際上也是執(zhí)行上面的步驟,即導(dǎo)入類型庫(kù)。實(shí)際上這種方法可以用 于所有的托管應(yīng)用程序中,包括托管的C++代碼、C#、Visual Basic.NET環(huán)境,.NET 框架的這種互操作性保護(hù)了組件開發(fā)者的既有投資,而且為我們的托管程序設(shè)計(jì)提供了一條思路。即我們可以把許多使用托管代碼難以實(shí)現(xiàn)或者實(shí)現(xiàn)起來(lái)非常麻煩的 功能(比如通過(guò)API函數(shù)調(diào)用讀寫軟盤硬盤物理扇區(qū))封裝到一個(gè)非托管COM組件中,通過(guò)組件調(diào)用間接實(shí)現(xiàn)。

 

分享:解讀.Net的精髓——XML和SOAP
Internet 的應(yīng)用正在不斷地?cái)U(kuò)大,但我們的 Internet 編程方式還處于石器時(shí)代。Internet 用戶就像老式主機(jī)的分時(shí)終端上的用戶一樣,他們從一個(gè)受保護(hù)的資源請(qǐng)求信息,然后等待回應(yīng)。你從正在瀏覽的 Internet 站點(diǎn)上接收的信息由它希望提供給你的、基于HTML 的

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2009-10-30
相關(guān).Net教程