C# COM接口轉(zhuǎn)換經(jīng)驗(yàn)總結(jié)
本文向大家介紹C# COM接口轉(zhuǎn)換,可能好多人還不知道C# COM接口轉(zhuǎn)換,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。
C#中不僅支持.Net 平臺(tái),而且支持COM平臺(tái)。為了支持 COM和.Net,C# 包含一種稱為屬性的獨(dú)特語(yǔ)言特性。一個(gè)屬性實(shí)際上就是一個(gè) C# 類,它通過修飾源代碼來提供元信息。屬性使 C# 能夠支持特定的技術(shù),如 COM 和 .Net,而不會(huì)干擾語(yǔ)言規(guī)范本身。C# 提供將COM接口轉(zhuǎn)換為 C#接口的屬性類。另一些屬性類將C# COM接口轉(zhuǎn)換為C# 類。執(zhí)行這些轉(zhuǎn)換不需要任何 IDL 或類工廠。
現(xiàn)在部署的任何COM 組件都可以在接口轉(zhuǎn)換中使用。通常情況下,所需的調(diào)整是完全自動(dòng)進(jìn)行的。
特別是,可以使用運(yùn)行時(shí)可調(diào)用包裝 (RCW) 從 .NET 框架訪問 COM 組件。此包裝將 COM 組件提供的C# COM接口轉(zhuǎn)換為與 .NET 框架兼容的接口。對(duì)于 OLE 自動(dòng)化接口,RCW 可以從類型庫(kù)中自動(dòng)生成;對(duì)于非 OLE 自動(dòng)化接口,開發(fā)人員可以編寫自定義 RCW,手動(dòng)將 COM 接口提供的類型映射為與 .NET 框架兼容的類型。
下面是接口轉(zhuǎn)換的C#程序:
- using System.Runtime.InteropServices;
- // 聲明一個(gè)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();
- }
【編輯推薦】