使用 COM 風格的編程介面

來源:互聯網
上載者:User

標籤:

使用COM 風格的編程介面

 

假設不直接使用 COM 庫。不建立自己的封裝。那麼更可能的是使用 COM 風格的編程介面。這是由於如今很多開發商公布應用程式時。提供了首選的Interop 組件(Primary Interop Assemblies)。這是預先建立的 COM 封裝,因此,我們就不須要再自己考慮用 TlbImp.exe 來建立封裝了。

 

注意

很多其它有關首選的Interop 組件的內容。能夠在 MSDN 上找到。http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 。

 

 

儘管首選的Interop 組件本質上就是 .NET 程式集,可是,通常有一些特殊的地方須要注意。比方:

某些數組和集合常常從 1 開始,而不是 0。

常常有一些方法,會有大量的可選參數;

很多屬性和方法會返回對象(object)類型,產生的結果對象須要強制轉換成真正的類型;

COM 類別包括非託管的資源。須要處理(dispose)。然而,這些類沒有實現標準的 .NET IDisposable 介面,因此。在 F# 的 use 綁定中就不能使用;只是。我們可以使用 F# 的對象運算式非常easy地就實現了 IDisposable。

F# 和 COM 進行互動與 C# 的關鍵不同在於,我們必須總是要建立對象的執行個體。而非介面。這聽趚有點奇怪,可是,在 COM 庫中,每個對象通常都有一個介面,有一個實現介面的類。在 C# 中,假設使用keyword new 嘗試建立 COM 介面的執行個體,的COM posablesable 編譯器會自己主動定向到(redirect)調用相應的類,而在 F#中就不是這樣。

與 Microsoft Office 互動可能是使用 COM 風格庫的最常見理由。

以下的清單是讀取 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()

 

注意這個示範範例是怎樣處理我們前面提到的特殊地方的。我們實現了 IDisposable 並把它綁定到 bookCloser,保證即使在出錯的情況下也能關閉活頁簿。Open 方法有 15 個參數。可是。我們僅僅用了兩個:.Open(@"Book1.xls", ReadOnly = true)。第一個工作表的索引 1:workBook.Worksheets.[1];終於,每一行必須被強制轉換起來(upcast)能夠使用:let row = row :?> Range。






使用 COM 風格的編程介面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.