国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

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

2024-07-21 02:30:13
字體:
供稿:網(wǎng)友


收集最實用的網(wǎng)頁特效代碼!

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

  c#中不僅支持.net 平臺,而且支持com平臺。為了支持 com和.net,c# 包含一種稱為屬性的獨特語言特性。一個屬性實際上就是一個 c# 類,它通過修飾源代碼來提供元信息。屬性使 c# 能夠支持特定的技術(shù),如 com 和 .net,而不會干擾語言規(guī)范本身。c# 提供將com接口轉(zhuǎn)換為 c#接口的屬性類。另一些屬性類將 com類轉(zhuǎn)換為c# 類。執(zhí)行這些轉(zhuǎn)換不需要任何 idl 或類工廠。

  現(xiàn)在部署的任何com 組件都可以在接口轉(zhuǎn)換中使用。通常情況下,所需的調(diào)整是完全自動進行的。

  特別是,可以使用運行時可調(diào)用包裝 (rcw) 從 .net 框架訪問 com 組件。此包裝將 com 組件提供的 com 接口轉(zhuǎn)換為與 .net 框架兼容的接口。對于 ole 自動化接口,rcw 可以從類型庫中自動生成;對于非 ole 自動化接口,開發(fā)人員可以編寫自定義 rcw,手動將 com 接口提供的類型映射為與 .net 框架兼容的類型。

  使用comimport引用com組件
com interop 提供對現(xiàn)有 com 組件的訪問,而不需要修改原始組件。使用comimport引用com組件常包括下面 幾個方面的問題:

  1、創(chuàng)建 com 對象。

  2、確定 com 接口是否由對象實現(xiàn)。

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

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

  創(chuàng)建 com 類包裝

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

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

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

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

  檢查 tlbimp 輸出的一種很好的方法是運行 .net 框架 sdk 命令行工具 ildasm.exe(microsoft 中間語言反匯編程序)來查看轉(zhuǎn)換結(jié)果。

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

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

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

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

  3、interfacetype,它指定接口是從 iunknown 還是從 idispatch 派生。

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

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

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

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

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

  以下示例在 c# 中聲明一個 coclass:

// 聲明一個com類 filgraphmanager
[comimport, guid("e436ebb3-524f-11ce-9f53-0020af0ba770")]
class filgraphmanager
{ } 

  c# 編譯器將添加一個無參數(shù)構(gòu)造函數(shù),可以調(diào)用此構(gòu)造函數(shù)來創(chuàng)建 com coclass 的實例。

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洮南市| 江口县| 旌德县| 安西县| 金平| 长宁区| 乐安县| 十堰市| 墨玉县| 铜山县| 济源市| 綦江县| 博爱县| 包头市| 霍山县| 鸡泽县| 扎囊县| 安陆市| 海城市| 巴塘县| 依兰县| 理塘县| 徐汇区| 灵山县| 鄂温| 得荣县| 朝阳区| 龙江县| 滦平县| 霞浦县| 鄄城县| 耒阳市| 绥宁县| 安阳县| 永胜县| 荆门市| 华池县| 东乌珠穆沁旗| 鄂尔多斯市| 武义县| 三亚市|