.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
超级会员免费看
订阅专栏 解锁全文
16万+

被折叠的 条评论
为什么被折叠?



