第六節(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] 下一頁
新聞熱點
疑難解答
圖片精選