使用 COM 风格的编程接口
使用COM 风格的编程接口
假设不直接使用 COM 库。不创建自己的包装。那么更可能的是使用 COM 风格的编程接口。这是由于如今很多开发商公布应用程序时。提供了首选的互操作程序集(Primary Interop Assemblies)。这是预先创建的 COM 包装,因此,我们就不须要再自己考虑用 TlbImp.exe 来创建包装了。
注意
很多其它有关首选的互操作程序集的内容。能够在 MSDN 上找到。http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 。
尽管首选的互操作程序集本质上就是 .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 风格的编程接口的更多相关文章
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结
引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...
- NetBIOS与Winsock编程接口
最近在看网络编程方面的书,由于不是通信专业出身的,以前理解的网络体系感觉就是tcp/ip,最近工作上接触到了一些光环网等乱七八糟的东西,有些基本的LC.SC连接器都不认识.花时间看了下计算机网络体系结 ...
- 基于VC的ACM音频编程接口压缩Wave音频(一)
(一)概述 音频数据一般都具有较高的采样率,经过压缩的原始数据才具有实用价值,否则不仅要占用大量存储空间而且在播放或进行网络传输时效率也是非常低下的,所以音频数字压缩编码在多媒体应用中有着广泛而又重要 ...
- Java链式编程接口
在android开发中显示一个AlertDialog时,常采用下列的写法: new AlertDialog.Builder(getApplicationContext()) .setTitle(&qu ...
- (转载)Linux系统调用及用户编程接口(API)
(转载)http://www.farsight.com.cn/news/emb167.htm 1 Linux系统调用 所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组 ...
- USB联机线编程接口(API)
USB联机线编程接口(API) 2013-10-19 本页面的文字允许在知识共享 署名-相同方式共享 3.0协议和GNU自由文档许可证下修改和再使用. 关键字:USB隔离线.USB点对点通讯.USB通 ...
- Windows数据库编程接口简介
数据库是计算机中一种专门管理数据资源的系统,目前几乎所有软件都需要与数据库打交道(包括操作系统,比如Windows上的注册表其实也是一种数据库),有些软件更是以数据库为核心因此掌握数据库系统的使用方法 ...
- Java8内置的函数式编程接口应用场景和方式
首先,我们先定义一个函数式编程接口 @FunctionalInterface public interface BooleanFunctionalInterface<T> { boolea ...
- Java8自定义函数式编程接口和便捷的引用类的构造器及方法
什么是函数编程接口? 约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equal),不算是函数式接口的方法. 被@FunctionalInterfa ...
随机推荐
- 思维导图(自己整理,希望对大家有用):JavaScript函数+canvas绘图+Array数组
1.javascript函数: 2.Array数组: 3.canvas绘图:
- HDU 2203 亲串(kmp)
Problem Description 随着人们年龄的增长更大,更聪明还是越大越愚蠢,这是一个值,相同的问题Eddy也一直在思考,由于他在非常小的时候就知道亲和串怎样推断了,可是发现,如今长大了却不知 ...
- MEF初体验之二:定义组合部件和契约
组合部件 在MEF中,一个组合部件就是一个组合单元,组合部件"出口"其它组合部件需要的服务并且从其它部件"进口"需要的服务.在MEF编程模型中,为了声明组合部件 ...
- 使用C#在Windows应用商店程序中获取CPU信息
using Windows.Devices.Enumeration; string guidStr="{97FADB10-4E33-40AE-359C-8BEF029DBDD0}" ...
- javascript中间preventDefault与stopPropagation角色介绍
preventDefault的作用是什么方法,它? 我们知道,例如,<a href="http://www.baidu.com">百度</a>,这是html ...
- WPF六个控制概述
在线演示:http://v.youku.com/v_show/id_XNzA0NjU1Mjk2.html 清晰版视频+代码下载:http://115.com/lb/5lbcftnrfo9s 一.简单介 ...
- 学生表sid,sname,结果表cid,cname,学生成绩表sid,cid,cscore,最高要求的分数输出候补课程专门命名
--1.建表SQL: --学生表: -- Createtable createtable STUDENT ( SID NUMBERnotnull, SNAME NVARCHAR2) ) table ...
- [Sqlite] --> Sqlite于Windows、Linux 和 Mac OS X 在安装过程
一个:于 Windows 安装 SQLite 1,下载 请訪问SQLite下载页面http://www.sqlite.org/download.html.从Windows 区下载预编译的二进制文件. ...
- Content://sms
package com.example.sms; import android.app.Activity; import android.app.Notification; import androi ...
- 【Machine Learning】Mahout基于协同过滤(CF)的用户推荐
一.Mahout推荐算法简介 Mahout算法框架自带的推荐器有下面这些: l GenericUserBasedRecommender:基于用户的推荐器,用户数量少时速度快: l GenericI ...