麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > C# > 正文

基于C#的接口基礎(chǔ)教程之六

2024-09-07 17:05:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

推薦:基于C#的接口基礎(chǔ)教程之五
  第五節(jié)、實(shí)現(xiàn)接口  1、顯式實(shí)現(xiàn)接口成員  為了實(shí)現(xiàn)接口,類可以定義顯式接口成員執(zhí)行體(Explicit interface member implementations)。顯式接口成員執(zhí)行體可以是一個(gè)方法、一個(gè)

  第六節(jié)、接口轉(zhuǎn)換

  C#中不僅支持.Net 平臺(tái),而且支持COM平臺(tái)。為了支持 COM和.Net,C# 包含一種稱為屬性的獨(dú)特語(yǔ)言特性。一個(gè)屬性實(shí)際上就是一個(gè) C# 類,它通過(guò)修飾源代碼來(lái)提供元信息。屬性使 C# 能夠支持特定的技術(shù),如 COM 和 .Net,而不會(huì)干擾語(yǔ)言規(guī)范本身。C# 提供將COM接口轉(zhuǎn)換為 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 框架訪問(wèn) COM 組件。此包裝將 COM 組件提供的 COM 接口轉(zhuǎn)換為與 .NET 框架兼容的接口。對(duì)于 OLE 自動(dòng)化接口,RCW 可以從類型庫(kù)中自動(dòng)生成;對(duì)于非 OLE 自動(dòng)化接口,開(kāi)發(fā)人員可以編寫(xiě)自定義 RCW,手動(dòng)將 COM 接口提供的類型映射為與 .NET 框架兼容的類型。

  使用ComImport引用COM組件
COM Interop 提供對(duì)現(xiàn)有 COM 組件的訪問(wèn),而不需要修改原始組件。使用ComImport引用COM組件常包括下面 幾個(gè)方面的問(wèn)題:

  1、創(chuàng)建 COM 對(duì)象。

  2、確定 COM 接口是否由對(duì)象實(shí)現(xiàn)。

  3、調(diào)用 COM 接口上的方法。

  4、實(shí)現(xiàn)可由 COM 客戶端調(diào)用的對(duì)象和接口。

  創(chuàng)建 COM 類包裝

  要使 C# 代碼引用COM 對(duì)象和接口,需要在 C# 中包含 COM 接口的定義。完成此操作的最簡(jiǎn)單方法是使用 TlbImp.exe(類型庫(kù)導(dǎo)入程序),它是一個(gè)包括在 .NET 框架 SDK 中的命令行工具。TlbImp 將 COM 類型庫(kù)轉(zhuǎn)換為 .NET 框架元數(shù)據(jù),從而有效地創(chuàng)建一個(gè)可以從任何托管語(yǔ)言調(diào)用的托管包裝。用 TlbImp 創(chuàng)建的 .NET 框架元數(shù)據(jù)可以通過(guò) /R 編譯器選項(xiàng)包括在 C# 內(nèi)部版本中。如果使用 Visual Studio 開(kāi)發(fā)環(huán)境,則只需添加對(duì) COM 類型庫(kù)的引用,將為您自動(dòng)完成此轉(zhuǎn)換。

  TlbImp 執(zhí)行下列轉(zhuǎn)換:

  1、COM coclass 轉(zhuǎn)換為具有無(wú)參數(shù)構(gòu)造函數(shù)的 C# 類。

  2、COM 結(jié)構(gòu)轉(zhuǎn)換為具有公共字段的 C# 結(jié)構(gòu)。

  檢查 TlbImp 輸出的一種很好的方法是運(yùn)行 .NET 框架 SDK 命令行工具 Ildasm.exe(Microsoft 中間語(yǔ)言反匯編程序)來(lái)查看轉(zhuǎn)換結(jié)果。

  雖然 TlbImp 是將 COM 定義轉(zhuǎn)換為 C# 的首選方法,但也不是任何時(shí)候都可以使用它(例如,在沒(méi)有 COM 定義的類型庫(kù)時(shí)或者 TlbImp 無(wú)法處理類型庫(kù)中的定義時(shí),就不能使用該方法)。在這些情況下,另一種方法是使用 C# 屬性在 C# 源代碼中手動(dòng)定義 COM 定義。創(chuàng)建 C# 源映射后,只需編譯 C# 源代碼就可產(chǎn)生托管包裝。

  執(zhí)行 COM 映射需要理解的主要屬性包括:

  1、ComImport:它將類標(biāo)記為在外部實(shí)現(xiàn)的 COM 類。

  2、Guid:它用于為類或接口指定通用唯一標(biāo)識(shí)符 (UUID)。

  3、InterfaceType,它指定接口是從 IUnknown 還是從 IDispatch 派生。

  4、PreserveSig,它指定是否應(yīng)將本機(jī)返回值從 HRESULT 轉(zhuǎn)換為 .NET 框架異常。
  聲明 COM coclass

  COM coclass 在 C# 中表示為類。這些類必須具有與其關(guān)聯(lián)的 ComImport 屬性。下列限制適用于這些類:

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

  2、類不能實(shí)現(xiàn)任何接口。

  4、類還必須具有為其設(shè)置全局唯一標(biāo)識(shí)符 (GUID) 的 Guid 屬性。

  以下示例在 C# 中聲明一個(gè) coclass:

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

  C# 編譯器將添加一個(gè)無(wú)參數(shù)構(gòu)造函數(shù),可以調(diào)用此構(gòu)造函數(shù)來(lái)創(chuàng)建 COM coclass 的實(shí)例。

分享:基于C#的接口基礎(chǔ)教程之四
  第四節(jié)、訪問(wèn)接口  對(duì)接口成員的訪問(wèn)  對(duì)接口方法的調(diào)用和采用索引指示器訪問(wèn)的規(guī)則與類中的情況也是相同的。如果底層成員的命名與繼承而來(lái)的高層成員一致,那么底層成員將覆蓋同

 

共4頁(yè)上一頁(yè)1234下一頁(yè)
 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 羞羞视频免费网站入口 | 视频一区二区三区中文字幕 | 精品在线观看一区二区 | 永久久久| 他也色在线视频 | 欧美激情精品久久久久久黑人 | 成人福利软件 | 无码av女优 | 四季久久免费一区二区三区四区 | 日本一区二区久久 | 久久不雅视频 | 欧美人xx| 国产婷婷一区二区三区 | 一级黄色国产视频 | 中文字幕视频在线播放 | 91网站在线观看视频 | 国产毛毛片一区二区三区四区 | 久久精品视频在线免费观看 | 成人毛片100免费观看 | 久久久久久久.comav | 久久精品亚洲一区二区 | 羞羞视频一区二区 | 久久亚洲美女视频 | 欧美日韩免费在线观看视频 | 欧美成人免费香蕉 | avlululu| 国产精品性夜天天视频 | 午夜精品福利视频 | 在线免费亚洲 | 激情视频在线播放 | 免费一级特黄欧美大片勹久久网 | v天堂在线视频 | 毛片大全免费看 | 精品国产一区三区| 久久大陆| 成人毛片免费看 | 外国一级黄色片 | 懂色av懂色aⅴ精彩av | 亚洲一二区精品 | 成人在线视频免费观看 | 热久久成人 |