You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中使用Late Binding Interop连接已打开Word实例获取信息失败解决方案

问题分析与解决方案

你的Late Binding代码报错的核心原因是:Activator.CreateInstance(wordType)会创建一个全新的Word应用程序实例,而非连接到你已经打开文档的那个正在运行的Word进程。这个新实例中没有打开的文档,因此触发了"无可用文档"的错误。

而非Late Binding代码使用Marshal2.GetActiveObject直接获取了系统中已运行的Word实例,所以能正常读取活动文档路径。要实现Late Binding的目标,你需要通过反射调用GetActiveObject来获取现有实例,而非创建新实例。

正确的Late Binding实现代码

// 通过反射获取Marshal类的类型
Type marshalType = Type.GetType("System.Runtime.InteropServices.Marshal");
// 获取GetActiveObject方法
MethodInfo getActiveObjectMethod = marshalType.GetMethod("GetActiveObject", new Type[] { typeof(string) });
// 调用方法获取已运行的Word实例
dynamic word = getActiveObjectMethod.Invoke(null, new object[] { "Word.Application" });

// 读取活动窗口的文档路径
Console.WriteLine(word.ActiveWindow.Document.FullName);

关键说明

  • 这段代码通过反射调用System.Runtime.InteropServices.Marshal.GetActiveObject,无需引用Office Interop库,完全依赖系统已安装的Office COM组件。
  • 如果当前没有运行的Word实例,GetActiveObject会抛出COMException,建议添加异常处理逻辑。
  • 使用dynamic类型可以在Late Binding场景下直接调用Word对象的属性和方法,和早期绑定的语法一致。

内容的提问来源于stack exchange,提问作者Silve2611

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:55:20