54、.NET与F:COM交互及PInvoke实战

.NET与F#:COM交互及PInvoke实战

1. 运行对象表(Running Object Table)

1.1 获取正在运行的COM对象引用

有时候,你需要获取一个已经在运行的进程外COM对象的引用。这在你想要自动化某个已启动应用程序的任务,或者在无需多次启动进程的情况下重用对象模型时非常有用。实现这一目标的最简单方法是通过 Marshal 类的 GetActiveObject 方法:

#r "EnvDTE80"
open System.Runtime.InteropServices
let appObj = Marshal.GetActiveObject("VisualStudio.DTE.11.0") :?> EnvDTE80.DTE2
printfn "%s" appObj.ActiveDocument.FullName

在这个例子中,你获取了Visual Studio的COM自动化模型中一个最重要接口的引用。一个有趣的实验是打印编辑器中打开的活动文档的名称,并尝试运行不同的Visual Studio实例,打开不同的文档。COM基础结构会连接到一个COM服务器实例,但无法指定特定的实例。

1.2 通过运行对象表查找特定实例

你可以通过访问一个名为运行对象表(Running Object Table,ROT)的系统范围的数据结构来查找特定的实例,该表提供了正在运行的COM服务器的列表。由于正在运行的服务器的名称在ROT中必须是唯一的,许多服务器会将进程ID(P

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值