基于C#的接口基礎教程之六(1)
2024-07-21 02:17:53
供稿:網友
 
第六節、接口轉換 
   
    c#中不僅支持.net 平臺,而且支持com平臺。為了支持 com和.net,c# 包含一種稱為屬性的獨特語言特性。一個屬性實際上就是一個 c# 類,它通過修飾源代碼來提供元信息。屬性使 c# 能夠支持特定的技術,如 com 和 .net,而不會干擾語言規范本身。c# 提供將com接口轉換為 c#接口的屬性類。另一些屬性類將 com類轉換為c# 類。執行這些轉換不需要任何 idl 或類工廠。 
   
    現在部署的任何com 組件都可以在接口轉換中使用。通常情況下,所需的調整是完全自動進行的。 
   
    特別是,可以使用運行時可調用包裝 (rcw) 從 .net 框架訪問 com 組件。此包裝將 com 組件提供的 com 接口轉換為與 .net 框架兼容的接口。對于 ole 自動化接口,rcw 可以從類型庫中自動生成;對于非 ole 自動化接口,開發人員可以編寫自定義 rcw,手動將 com 接口提供的類型映射為與 .net 框架兼容的類型。 
   
    使用comimport引用com組件 
  com interop 提供對現有 com 組件的訪問,而不需要修改原始組件。使用comimport引用com組件常包括下面 幾個方面的問題: 
   
    1、創建 com 對象。 
   
    2、確定 com 接口是否由對象實現。 
   
    3、調用 com 接口上的方法。 
   
    4、實現可由 com 客戶端調用的對象和接口。 
   
    創建 com 類包裝 
   
    要使 c# 代碼引用com 對象和接口,需要在 c# 中包含 com 接口的定義。完成此操作的最簡單方法是使用 tlbimp.exe(類型庫導入程序),它是一個包括在 .net 框架 sdk 中的命令行工具。tlbimp 將 com 類型庫轉換為 .net 框架元數據,從而有效地創建一個可以從任何托管語言調用的托管包裝。用 tlbimp 創建的 .net 框架元數據可以通過 /r 編譯器選項包括在 c# 內部版本中。如果使用 visual studio 開發環境,則只需添加對 com 類型庫的引用,將為您自動完成此轉換。 
   
    tlbimp 執行下列轉換: 
   
    1、com coclass 轉換為具有無參數構造函數的 c# 類。 
   
    2、com 結構轉換為具有公共字段的 c# 結構。 
   
    檢查 tlbimp 輸出的一種很好的方法是運行 .net 框架 sdk 命令行工具 ildasm.exe(microsoft 中間語言反匯編程序)來查看轉換結果。 
   
    雖然 tlbimp 是將 com 定義轉換為 c# 的首選方法,但也不是任何時候都可以使用它(例如,在沒有 com 定義的類型庫時或者 tlbimp 無法處理類型庫中的定義時,就不能使用該方法)。在這些情況下,另一種方法是使用 c# 屬性在 c# 源代碼中手動定義 com 定義。創建 c# 源映射后,只需編譯 c# 源代碼就可產生托管包裝。 
   
    執行 com 映射需要理解的主要屬性包括: 
   
    1、comimport:它將類標記為在外部實現的 com 類。 
   
    2、guid:它用于為類或接口指定通用唯一標識符 (uuid)。 
   
    3、interfacetype,它指定接口是從 iunknown 還是從 idispatch 派生。 
   
    4、preservesig,它指定是否應將本機返回值從 hresult 轉換為 .net 框架異常。 
注冊會員,創建你的web開發資料庫,