基於C#的介面基礎教程之六

來源:互聯網
上載者:User

  第六節、介面轉換

  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 架構異常。
  聲明 COM coclass

  COM coclass 在 C# 中表示為類。這些類必須具有與其關聯的 ComImport 屬性。下列限制適用於這些類:

  1、類不能從任何其他類繼承。

  2、類不能實現任何介面。

  4、類還必須具有為其設定通用唯一識別碼 (GUID) 的 Guid 屬性。

  以下樣本在 C# 中聲明一個 coclass:

// 聲明一個COM類 FilgraphManager
[ComImport, Guid("E436EBB3-524F-11CE-9F53-0020AF0BA770")]
class FilgraphManager
{ } 

  C# 編譯器將添加一個無參數建構函式,可以調用此建構函式來建立 COM coclass 的執行個體。

共4頁: 上一頁 1 [2][3][4]下一頁



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.