ASP.NET(C#)中調用AGENT動畫的程式

來源:互聯網
上載者:User
1、引用
using AgentObjects;//添加引用
using AgentServerObjects;
2、寫程式

AgentObjects.Agent AxAgent=new AgentObjects.Agent(); 
IAgentCtlCharacterEx Character; 
AxAgent.Characters.Load("Genie.acs",(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"); 
//程式為什麼總是在人物載入時出錯!

************************************************************************
眾所周知,ASP.NET是基於通用語言運行庫建立的,也就是所謂的託管執行環境。產生的程式碼稱為Managed 程式碼。編譯器能夠從原始碼的描述中產生中繼資料資訊,而運行庫又從中繼資料中獲得Managed 程式碼的資訊。而我們編寫的組件一般是在非託管環境下建立的,這些組件往往不包含中繼資料資訊,那麼我們怎麼在Managed 程式碼中使用這些中繼資料資訊呢? 
 
為了在託管環境中使用Unmanaged 程式碼,我們首先必須手工為這些現有的組件產生中繼資料資訊 。必須有一種工具能夠產生中繼資料。能夠從某個地方獲得中繼資料。這個中繼資料的發源地就是類型庫,事實上,今天所有的組件都有一個類型庫。 
 
這裡為了說明如何產生中繼資料資訊,我們不妨以Microsoft Agent組件為例進行說明。這個組件類似於Office的小助手,它能夠完成各種豐富多彩的人性化的動作,並且支援語音辨識和語音合成。一般的作業系統都預設安裝了這個組件,使用者該不會發愁沒有這個組件吧。如果你的系統刪除了這個組件,你可以到http://microsoft.com/msagent/downloads.htm.去下載。 
 
1、首先是建立中繼資料 
 
Microsoft Agent控制項預設是安裝在%systemroot%\msagent\目錄下,我們可以首先從開始菜單中Visual Studio.NET Command Prompt功能表項目定位到這個目錄。在這個目錄執行下面的命令。 
 
tlbimp agentctl.dll /out: agentctl_proxy.dll 
通過這個命令我們可以建立一個包含中繼資料資訊的代理檔案agentctl_proxy.dll。注意這並不是一個真正的動態串連庫檔案,而是一個裝配檔案(Assembly),也就是我們非託管COM組件的代理。 
 
也可以通過.NET架構提供的公用程式aximp.exe建立,命令列如下,這樣它會產生兩個檔案,如所示:注意AgentObjects.dll 和agentctl_proxy.dll檔案是完全一樣的檔案。 
 
aximp %systemroot%\msagent\agentctl.dll 
 
 
 
2、安裝到ASP.NET中 
把中繼資料檔案安裝到ASP.NET 環境中有兩種辦法:  
 
一是把檔案複製到應用程式的BIN目錄。 
 
二是把它複製到ASP.NET目錄。 
 
第二種方法有一個缺陷,你必須在每一個使用組件的ASP.NET頁面插入一個@Assembly語句。而儲存到Bin目錄則可以避免這一點。assembly將會被載入到應用程式的所有ASP.NET頁面。因此我們最好還是把它放在bin目錄。  
 
3、IL反組譯碼(Disassembler) 
 
現在基本上到了令大多數VB或VBScript程式員頭疼的時候了,我們要利用一個反組譯碼器產生一些重要訊息。 
 
Assembly 的名稱空間(使用 @Import 語句) 
 
精確的類名(這可能與ASP有著很大的不同!) 
 
方法和屬性的資料類型 
 
方法和屬性的精確拼字。注意在 C# 中 Bodytext 和 BodyText是兩個完全不同的變數。 
 
產生上述資訊需要使用IL (Intermediate Language) Disassembler中繼語言反組譯碼器,你可以在產生中繼資料後,並把它們移動到適當目錄後直接鍵入ildasm.exe啟用這個命令。然後可以利用File | Open,選擇相應的檔案,顯示的結果如所示,顯示的結果非常類似於OLE/COM查看器獲得結果。 
 
 
   
 
 
注意產生的彙編檔案不一樣,名稱空間的名稱也不一樣,在ASP.NET頁面往往需要使用 @Import 匯入名稱空間,不過它們的類、屬性、方法都是一樣的。對於ASP.NET程式員來說,整個藍色的符號都是很重要的,因為它們表示的是一個類或者是一個介面。如果我們對這些類或者介面進行展開,我們會獲得一系列屬性和方法的列表。  
 
我們看到的所有方法都有一個精確的資料類型描述。首先是方法名稱,冒號後面是傳回值類型圓括弧中是方法需要的參數。 
 
當我們談及用get_ 和set_方法描述屬性的時候,VBScript程式員可能會一頭霧水,我們知道每一個屬性實際上是對應於類中的一個私人成員,屬性的讀寫分別是通過這兩個函數實現的。  
 
 
 
每一個屬性旁邊都有一個紅色的標記,雙擊這個屬性,我們可以獲得屬性的定義,我們可以看到屬性可以為Get, Set 或者 Get/Set。 
 
4、組件的使用 
當我們對中繼資料瞭解清楚以後,剩下的工作就是如何在ASP.NET 中使用這個組件,下面是一段使用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"); 
%> 
當匯入類型庫以後,接著我們要建立這個類的執行個體,剩下的使用方法基本上和ASP應用組件差不多。  
 
所有的COM組件調用的方法基本上相同,正如在託管應用程式(C#、Visual Basic.NET)加入一個COM組件引用,接著系統要為這些Unmanaged 程式碼產生一個封裝,實際上也是執行上面的步驟,即匯入類型庫。實際上這種方法可以用於所有的託管應用程式中,包括託管的C++代碼、C#、Visual Basic.NET環境,.NET 架構的這種互通性保護了組件開發人員的既有投資,而且為我們的託管程式設計提供了一條思路。即我們可以把許多使用Managed 程式碼難以實現或者實現起來非常麻煩的功能(比如通過API函數調用讀寫磁碟片硬碟物理扇區)封裝到一個非託管的COM組件中,通過組件調用間接實現。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.