日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用 COM 风格的编程接口

發(fā)布時(shí)間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 COM 风格的编程接口 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用COM 風(fēng)格的編程接口

?

假設(shè)不直接使用 COM 庫(kù)。不創(chuàng)建自己的包裝。那么更可能的是使用 COM 風(fēng)格的編程接口。這是由于如今很多開(kāi)發(fā)商公布應(yīng)用程序時(shí)。提供了首選的互操作程序集(Primary Interop Assemblies)。這是預(yù)先創(chuàng)建的 COM 包裝,因此,我們就不須要再自己考慮用 TlbImp.exe 來(lái)創(chuàng)建包裝了。

?

注意

很多其它有關(guān)首選的互操作程序集的內(nèi)容。能夠在 MSDN 上找到。http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 。

?

?

盡管首選的互操作程序集本質(zhì)上就是 .NET 程序集,可是,通常有一些特殊的地方須要注意。比方:

某些數(shù)組和集合常常從 1 開(kāi)始,而不是 0。

常常有一些方法,會(huì)有大量的可選參數(shù);

很多屬性和方法會(huì)返回對(duì)象(object)類型,產(chǎn)生的結(jié)果對(duì)象須要強(qiáng)制轉(zhuǎn)換成真正的類型;

COM 類包括非托管的資源。須要處理(dispose)。然而,這些類沒(méi)有實(shí)現(xiàn)標(biāo)準(zhǔn)的 .NET IDisposable 接口,因此。在 F# 的 use 綁定中就不能使用;只是。我們可以使用 F# 的對(duì)象表達(dá)式非常easy地就實(shí)現(xiàn)了 IDisposable。

F# 和 COM 進(jìn)行交互與 C# 的關(guān)鍵不同在于,我們必須總是要?jiǎng)?chuàng)建對(duì)象的實(shí)例。而非接口。這聽(tīng)趚有點(diǎn)奇怪,可是,在 COM 庫(kù)中,每個(gè)對(duì)象通常都有一個(gè)接口,有一個(gè)實(shí)現(xiàn)接口的類。在 C# 中,假設(shè)使用keyword new 嘗試創(chuàng)建 COM 接口的實(shí)例,的COM posablesable 編譯器會(huì)自己主動(dòng)定向到(redirect)調(diào)用相應(yīng)的類,而在 F#中就不是這樣。

與 Microsoft Office 交互可能是使用 COM 風(fēng)格庫(kù)的最常見(jiàn)理由。

以下的清單是讀取 Excel 電子表格的信息。

?

open System

open Microsoft.Office.Interop.Excel

?

let main() =

? // initalize an excel application

? let app = new ApplicationClass()

?

? // load a excel work book

? let workBook =app.Workbooks.Open(@"Book1.xls",ReadOnly = true)

?

? // ensure work book is closed corectly

? use bookCloser ={ new IDisposable with

??????????????????????member x.Dispose() = workBook.Close() }

?

? // open the first worksheet

? let worksheet =workBook.Worksheets.[1] :?> _Worksheet

?

? // get the A1 ceel and all surround cells

? let a1Cell =worksheet.Range("A1")

? let allCells =a1Cell.CurrentRegion

? // load all cells into a list of lists

? let matrix =

??? [ for row inallCells.Rows ->

????? let row = row:?> Range

????? [ for cell inrow.Columns ->

?????? ?let cell = cell :?

> Range

??????? cell.Value2] ]

?

? // close the workbook

? workBook.Close()

?

? // print the matrix

? printfn "%A" matrix

?

do main()

?

注意這個(gè)演示樣例是怎樣處理我們前面提到的特殊地方的。我們實(shí)現(xiàn)了 IDisposable 并把它綁定到 bookCloser,保證即使在出錯(cuò)的情況下也能關(guān)閉工作簿。Open 方法有 15 個(gè)參數(shù)。可是。我們僅僅用了兩個(gè):.Open(@"Book1.xls", ReadOnly = true)。第一個(gè)工作表的索引 1:workBook.Worksheets.[1];終于,每一行必須被強(qiáng)制轉(zhuǎn)換起來(lái)(upcast)能夠使用:let row = row :?> Range。






總結(jié)

以上是生活随笔為你收集整理的使用 COM 风格的编程接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。