你目前正处于脱机状态,正在等待 Internet 重新连接

BUG:自动化客户端在调用 Word 的 Find 对象时出现错误或崩溃

针对 Office 2003 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Office 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

症状
当您所使用的进程外客户端应用程序使用早期绑定来使 Word 97 或更高版本自动运行时,该应用程序可能会由于存在访问冲突而崩溃,或者出现以下错误消息之一:

从 Microsoft Visual Basic 中
Run-time error '-2147023113 (800706f7)':
The method '~' of object '~' failed
Run-time error '-2147023113 (800706f7)':
Method 'Execute' of object 'Find' failed
Run-time error 430:
Class does not support automation or does not support expected interface.
从 Microsoft Visual C++ 中
HRESULT = 0x800706F7
RPC_X_BAD_STUB_DATA - The stub received bad data.
注意:在调试版本中,将会从“声明”对话框中收到堆栈损坏警告,并且 EAX 的值与上面列出的值相同。在发行版本中,堆栈损坏将可能在此后不久使该应用程序崩溃,但 HRESULT 值可能与上面的值类似。

该问题会在某些计算机上持续发生,但在另一些计算机上却可能永远不会发生。安装新的应用程序或 Microsoft Excel Service Pack 可能导致先前正常工作的计算机遇到该问题。
原因
Excel 5.0 版将 Word 用于其接口标识符的服务器全局唯一标识符 (GUID) 用于现在已弃用的较旧对象模型。

当 Excel 5.0 类型库在系统上重新注册时,注册表中应指向 Word 类型库的接口 GUID 将指向 Excel 5.0 库,并且 COM 可能会错误地使用早期 Word 绑定为进程外客户端构建错误的代理 v 表。由于此代理是为 Excel 的调度接口而不是为预期的 Word 接口配置的,因此对此代理进行的调用将返回错误或崩溃。

在 Excel 5.0 类型库以及 Word 8.0、8.1、10.0 和 11.0 类型库中复制了下列 GUID:

接口 ID (GUID)Word 接口Excel 5.0调度接口
{000209B1-0000-0000-C000-000000000046}ReplacementWorksheets
{000209AD-0000-0000-C000-000000000046}DictionaryModule
{000209AE-0000-0000-C000-000000000046}ReadabilityStatisticsModules
{000209AF-0000-0000-C000-000000000046}ReadabilityStatisticDialogSheet
{000209B0-0000-0000-C000-000000000046}FindDialogSheets

如果正确注册了 Word 类型库,则 COM 将正常构建正确的代理和进程外调用功能。
解决方案
要解决此问题,请执行下列操作之一:
  • 修改您的代码,在上面列出的任何 Word 接口上调用方法或属性时都使用晚期绑定。
    - 或 -

  • 在发生该问题的系统上重新注册 Word 类型库。
建议您使用晚期绑定解决方案。因为两种类型库均描述了实现 IDispatch 接口的接口,所以对任何 IDispatch 方法的调用都将有效,而与最后在系统上注册哪个类型库无关。这是确保您的代码不会在您未管理的系统上遇到此错误的唯一方法。

对于所使用的客户端应用程序无法重新编译为使用晚期绑定的客户,在大多数情况下,可以通过重新注册 Word 类型库来解决该问题。由于在再次重新注册 Excel 5.0 库时会重新出现该问题,因此这不是理想的解决办法。不过,由于重新注册 Excel 5.0 库的可能性很小,因此此方法对于大多数用户来说是可行的。

要重新注册 Word 类型库,请找到系统上安装的 Word 版本的相应类型库:

版本库名称
Word 97msword8.olb
Word 2000msword9.olb
Word 2002msword.olb
Word 2003msword.olb

然后,在命令行中将 Regtlib.exe 与类型库的完整路径一起使用以向 COM 重新注册该库。Regtlib.exe 将在传入的类型库(.tlb 或 .olb)文件上调用 LoadTypeLibRegisterTypeLib 应用程序接口 (API)。COM 会修复错误配置的注册表项。

Regtlib.exe 包含在 Windows 库更新程序中。 有关库更新程序的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
197298INFO:Microsoft 库更新:What, Where, Why
状态
Microsoft 已经确认这是本文开头列出的 Microsoft 产品中的错误。
更多信息
Excel 5.0 类型库 (Xl5en32.olb) 是为了向后兼容而提供的,并供在 Excel 97 之前编写的客户端使用。Excel 97 和更高版本的类型库与 Word 类型库之间不存在冲突。通常情况下不会注册 Excel 5.0 库,因此大多数客户端都不会遇到此问题。遇到此问题的客户端可能已安装了使用该库并在安装 Office 后进行注册的特定产品。

重现此问题的步骤

  1. 找到 Excel 5.0 类型库 (Xl5en32.olb),并通过在命令提示符处键入 Regtlib 来注册它。
  2. 在 Visual Basic 中,新建一个标准 EXE 项目。默认情况下会创建 Form1。
  3. 向 Form1 添加一个按钮,并将以下代码粘贴到 Form1 的代码部分中:
    Private Sub Command1_Click()   Dim oApp As Word.Application   Dim oDoc As Word.Document   Dim oSel As Word.Selection         Set oApp = New Word.Application   oApp.Visible = True      Set oDoc = oApp.Documents.Add   Set oSel = oApp.Selection      oSel.TypeText "This is a test. You too can automate Word."   oSel.Start = 0      oSel.Find.Execute "Word", , , , , , True, _      wdFindContinue, , "Microsoft Word 2000", wdReplaceAll         MsgBox "Did it work?"      Set oSel = Nothing   oDoc.Saved = True   oDoc.Close   Set oDoc = Nothing      oApp.Quit   Set oApp = Nothing   End Sub					
  4. 项目菜单上单击引用。在引用对话框中,选择 Microsoft Word 8.0 对象库(或选择 Word 9.0 对象库、Word 10.0 对象库或 Word 11.0 对象库),然后单击确定
  5. 编译并运行这些代码,或按 F5 在调试器中运行这些代码。单击命令按钮,就会看到在“症状”部分中列出的错误。
  6. 通过按照“解决办法”部分中的说明重新注册 Word 类型库来纠正该问题,或使用以下代码替换 Selection 对象的早期绑定声明以使用晚期绑定:
        Dim oSel As Object					
invalid page fault IPF "memory cannot be read" error -2147023113 800706f7 -2147023112 800706f8 430
属性

文章 ID:292744 - 上次审阅时间:03/30/2006 10:36:00 - 修订版本: 4.1

Microsoft Office Word 2003, Microsoft Word 2002 标准版, Microsoft Word 2000 标准版, Microsoft Word 97 标准版, Microsoft Visual Basic 6.0 专业版, Microsoft Visual Basic 6.0 企业版, Microsoft Visual C++ 6.0 专业版

  • kbbug kbnofix kbautomation KB292744
反馈