GetObject返回H_RESULT E_FAIL

时间:2013-02-14 15:01:22

标签: vb.net com constructor ms-word

我遇到了这段代码的问题,而且我不太确定问题是诚实的。最初的问题是我编写的应用程序打开了一个单词实例,但如果机器上已经有一个单词实例,它只会打开第二个实例,但它不会插入我在该实例中创建的文档。我最终得到的是两个窗口,一个是Word本身,一个是文档,一个是Word和文档。他们原来的运行单词应用程序仍然正常运行,在它自己的Word / Document组合中,应该有。我试图通过getObject抓取Word的运行实例来解决这个问题,但它只是不断返回失败。

我读到你必须给焦点专注然后失去焦点才能用ROT列出,但即使等了10分钟,它仍然会返回以下错误:

AnswerWizard = {“错误HRESULT E_FAIL已从调用COM组件返回。”}

我想知道是否有关于getObject的内容以及链接到另一个导致此错误的Office应用程序实例的能力?

信息:

Windows 7

Word 2003

桌面VB应用程序

代码:

Private wordApp As Word.Application

Public Sub New()
    Try
        wordApp = CType(GetObject(, "Word.Application"), Word.Application)
    Catch ex As Exception
        wordApp = New Word.Application
    End Try
End Sub

注意:试过,没有CType,没关系。如果没有单词运行的实例,它确实有效,但这只是因为它是我的异常。

问题:

如果我尝试链接到已经运行的Word实例,代码将运行而不会抛出错误,但我得到AnswerWizard = {“错误HRESULT E_FAIL已从调用COM组件返回。”}。然后我的代码继续打开一个空白单词和单词/文档的实例,当应该只有一个时,共有两个窗口。我错过了一些关于getObject的东西吗?

1 个答案:

答案 0 :(得分:1)

GetObject and CreateObject behavior of Office automation servers中,Microsoft建议避免使用GetObject()。我同意这一点:除非您需要在用户会话中与文档进行交互,否则打开第二个文档可能会受到用户的干扰。一个独立的实例可以隐藏其工作,或者锁定用户界面。

当我运行另一个Word实例时,您的问题对我来说很熟悉,尽管在VBA环境中。

Office应用程序文档中看起来像对象的许多关键字实际上是Application对象的方法 - Word中最常见的一种是Selection。使用以下方法指定应用程序对象至关重要:wordApp.Selection,否则该方法将应用于正在运行的Word的第一个实例,通常会导致错误。