C# COM接口轉換經驗總結
本文向大家介紹C# COM接口轉換,可能好多人還不知道C# COM接口轉換,沒有關系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
C#中不僅支持.Net 平臺,而且支持COM平臺。為了支持 COM和.Net,C# 包含一種稱為屬性的獨特語言特性。一個屬性實際上就是一個 C# 類,它通過修飾源代碼來提供元信息。屬性使 C# 能夠支持特定的技術,如 COM 和 .Net,而不會干擾語言規范本身。C# 提供將COM接口轉換為 C#接口的屬性類。另一些屬性類將C# COM接口轉換為C# 類。執行這些轉換不需要任何 IDL 或類工廠。
現在部署的任何COM 組件都可以在接口轉換中使用。通常情況下,所需的調整是完全自動進行的。
特別是,可以使用運行時可調用包裝 (RCW) 從 .NET 框架訪問 COM 組件。此包裝將 COM 組件提供的C# COM接口轉換為與 .NET 框架兼容的接口。對于 OLE 自動化接口,RCW 可以從類型庫中自動生成;對于非 OLE 自動化接口,開發人員可以編寫自定義 RCW,手動將 COM 接口提供的類型映射為與 .NET 框架兼容的類型。
下面是接口轉換的C#程序:
- using System.Runtime.InteropServices;
- // 聲明一個COM接口 IMediaControl
- [Guid("56A868B1-0AD4-11CE-B03A-0020AF0BA770"),
- InterfaceType(ComInterfaceType.InterfaceIsDual)]
- interface IMediaControl // 這里不能列出任何基接口
- {
- void Run();
- void Pause();
- void Stop();
- void GetState( [In] int msTimeout, [Out] out int pfs);
- void RenderFile(
- [In, MarshalAs(UnmanagedType.BStr)] string strFilename);
- void AddSourceFilter(
- [In, MarshalAs(UnmanagedType.BStr)] string strFilename,
- [Out, MarshalAs(UnmanagedType.Interface)] out object ppUnk);
- [return : MarshalAs(UnmanagedType.Interface)]
- object FilterCollection();
- [return : MarshalAs(UnmanagedType.Interface)]
- object RegFilterCollection();
- void StopWhenReady();
- }
【編輯推薦】