调用 COM 对象





大多数 Windows 程序猿都熟悉组件对象模型(Component Object Model,COM)。在某程度上。.NET 框架 就是为了替换 COM,可是。系统仍然保留了这个功能。可能就是为了我们的不时之需。

Windows 中很多编程接口都公开为 COM 对象,尽管,如今越来越多地有了 .NET 框架等效的可托管对象。但仍有一些并没有等效的可托管对象;另外,另一些开发商出售的软件是通过 COM 公开编程接口的。

设计 .NET 框架就是为了可以和 COM 进行非常好地互操作的,因此,调用 COM 组件一般是相当简单的。调用 COM 组件总是通过可托管的包装(wrapper)完毕的,由它处理调用非托管的代码。生成包装使用工具 TlbImp.exe,称为类型库导入器(Type Library Importer)随 .NET SDK 一起发行。





注意

能够在 http://msdn2.microsoft.com/en-us/library/tt0cf3sx(VS.80).aspx 上找到很多其它有关工具 TlbImp.exe 的相关内容。





然而。虽然有 TlbImp.exe。可是,假设你发现须要 COM 组件时,首先应该去检查是否有开发商提供了可托管的包装。称为首选的互操作程序集(Primary Interop Assemblies)。很多其它有关首选的互操作程序集的内容。參见下一节“使用 COM 风格的编程接口”。

可是。有时还是须要直接使用 TlbImp.exe。幸运的是,这非常easy。全部要做的是把包括 COM 组件的 .dll 的路径传给 TlbImp.exe。可托管的包装就产生在当前文件夹下。假设想为 Microsoft Speech API 创建可托管的包装,就使用以下的命令:





tlbimp "C:\Program Files\Common Files\Microsoft Shared\Speech\sapi.dll"









注意:TlbImp.exe 有两个命令行开关:

/out:控制产生的可托管的包装的文件名称和位置;

/keyfile:提供键去签名输出的程序集。





产生的 .dll 是一个 .NET 程序集,能够像不论什么的 .NET 程序集一样使用,在 fsc.exe 命令中用开关 –r 进行引用。这个命令另一个实用的副产品,假设编程接口没有非常好的文档,能够用程序集浏览器,比方 Reflector,我们在第十二章中讨论过,能够找出很多其它有关这个编程接口的结构。

之后。我能说的最坏的事情,就是你可能会发现这些程序集的结构与 COM 模型的命令结构有点不同平常,因此,不能与大多数的 .NET 程序集不共享同样的命名转换。你会发现。在这个程序集中的全部类,都有一固定的后缀 Class,每个类都提供一个单独的接口:这就是COM 对象的唯一要求。以下的样例演示怎样包装 Microsoft Speech API,我们在前面的样例中使用过:





open SpeechLib





let main() =

  // create an new instance of a com class

  // (these almost always end with "Class")

  let voice = new SpVoiceClass()

  // call a method Speak, ignoring the result

  voice.Speak("Hello world", SpeechVoiceSpeakFlags.SVSFDefault) |> ignore





do main()

调用 COM 对象的更多相关文章

  1. Android NDK开发之Jni调用Java对象

    https://my.oschina.net/zhiweiofli/blog/114064 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instan ...

  2. java双线程调用同一个对象+锁

    两个线程(Thread)调用同一个对象(使用Runnable接口的对象ThreadJob) 误区:下一个线程会从上一个线程结束的地方开始 正解:如 public domd implements Run ...

  3. .Net Remoting 调用远程对象

    根据需求,我们的系统必须以C/S方式构建,而且是三层架构,这样一来,就出现了服务器端和客户端通信的问题. 为了解决双方的通信问题,还要考虑效率.性能等方面,经过分析.试验,我们根据效率.移植.开发难易 ...

  4. 错误笔记 对象为null时调用改对象的方法会报错

    对象为null时调用改对象的方法会报错

  5. 正确释放WORD对象(COM组件) COMException: 被调用的对象已与其客户端断开连接

    本来form method=post本页面 修改为其他页面 action=save.aspx后没问题 其他问题可参考以下: 引自:http://topic.csdn.net/u/20090108/17 ...

  6. JavaScript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prompt()

    第一种:alert()方法 alert()方法是这三种对话框中最容易使用的一种,她可以用来简单而明了地将alert()括号内的文本信息显示在对话框中,我们将它称为警示对话框,要显示的信息放置在括号内, ...

  7. java反射调用某个对象的方法

    // 反射调用某个对象的方法 public Object invokeMethod(Object methodObject, String methodName, Object[] args) thr ...

  8. 在调用self对象时,本类调用用Win32Info().collect()

    import platform class Test: def test(self): func = getattr(self,'windows') func() @staticmethod def ...

  9. 42th 逻辑的连续性 取决于 细节的理解-------------我是个厨子:类的调用vs 对象调用方法

    类的调用vs 对象调用方法   class Cook5:    '''这是一个厨师的类'''        # 类是一系列对象相同的特征与技能的结合体        # 用变量表示特征(属性)    ...

随机推荐

  1. poj1753(位运算压缩状态+bfs)

    题意:有个4*4的棋盘,上面摆着黑棋和白旗,b代表黑棋,w代表白棋,现在有一种操作,如果你想要改变某一个棋子的颜色,那么它周围(前后左右)棋子的颜色都会被改变(白变成黑,黑变成白),问你将所有棋子变成 ...

  2. C# 多态理解

    封装.继承.多态,面向对象的三大特性,前两项理解相对容易,但要理解多态,特别是深入的了解,对于初学者而言可能就会有一定困难了.我一直认为学习OO的最好方法就是结合实践,封装.继承在实际工作中的应用随处 ...

  3. springboot 使用c3p0数据库连接池

    springboot 使用c3p0数据库连接池的方法  本文转自:http://www.cnblogs.com/xiaosiyuan/p/6255292.html 使用springboot开发时,默认 ...

  4. C语言 · 求arccos值

    算法提高 7-2求arccos值   时间限制:10.0s   内存限制:256.0MB      问题描述 利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[- ...

  5. 【进阶修炼】——改善C#程序质量(2)

    16, 元素可变的情况下应避免用数组. 数组是定长的集合,可以考虑用ArrayList或List<T>集合.ArrayList元素是object类型,有装箱的开销,性能较低.另外Array ...

  6. 【异常】IOException parsing XML document from class path resource [xxx.xml]

    1.IDEA导入项目运行出现异常 org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing ...

  7. linux 安装 vsftpd服务

    yum install vsftpd 修改配置文件 vim /etc/vsftpd/ftpusers vim /etc/vsftpd/user_list 简单起见,注释掉两个配置文件中的所有用户.

  8. VS2008中设置字体大小和添加显示行号

    1.字体设置 菜单->工具->选项->环境->字体和颜色 在字体那一栏可以选字体,VC6.0默认的字体是Fixedsys,字体大小你可以设为12,就与VC6.0的一样的字体了. ...

  9. JSP字符集编码集合

    在这里,我们先说说JSP/Servlet中的几个编码的作用. 在JSP/Servlet 中主要有以下几个地方可以设置编码,pageEncoding="UTF-8".contentT ...

  10. Casual Note of OS

    20170104 冯诺依曼计算机(遵循冯诺依曼结构设计的计算机:存储器.运算器.控制器.输入设备.输出设备)之前也有计算机,不过在那之前的计算机是专用的,不可编程,只能干特定的事情没法干其他事.与之前 ...