VB.net程序违反了InteropServices.COMException Bug

时间:2016-09-22 10:12:44

标签: vb.net

我有一个我写过的VB.net程序并且已经使用了数百次。在使用Windows 7 I"升级" Office 2010和IIRC必须进行一些小改动才能使其发挥作用。我现在(并且我把它放在引号中,因为我没有看到将其称为升级的好处!)"已升级"到Windows 10,但我更喜欢它回到Office 2007。我也在使用2015年的Visual Studio社区。所有这些都可能有所帮助!!!

所以,我运行该程序,它失败并出现以下错误:

  

未处理的类型异常   ' System.Runtime.InteropServices.COMException'发生在   KA_Newsletter.exe

     

其他信息:Word无法打开此文档模板。

     

(L:... \ Customize Ribbon Example 2.dotm)

我已查找错误并且有一个Microsoft页面......

MS Support Bug

...这表明这可能是一个Bug,它解释了为什么它可能会发生并给出解决方案,但我编程很有趣,我根本不是VB的专家,它可能也是写的用俄语为所有它帮助我!!!

我也不知道为什么Word应该尝试打开那个示例模板,我复制一个我自己的模板来创建一个新的Word文档,这是非常基本的东西!这是相关的代码,非常感谢任何帮助...

Dim myNewsLetter As String

。 。

If File.Exists(myNewsLetter) Then
    'do nothing
Else
    myTemplate = myTempFolder & "KA_Newsletter.doc"
    File.Copy(myTemplate, myNewsLetter)
    Create_Blank_Newsletter()
End If

。 。

Private Sub Create_Blank_Newsletter()

    myMSWord = New Word.Application
    myMSDoc = myMSWord.Documents.Open(myNewsLetter) << <Error occurs on this line 
    myMSWord.WindowState= Word.WdWindowState.wdWindowStateNormal
    myMSWord.Visible= False

更新:

奥拉夫,我更新了代码如下......

myMSWord = New Word.Application

Dim inval As Object
'Marshal the object before passing it to the method.
inval = New System.Runtime.InteropServices.DispatchWrapper(myNewsLetter)
myMSDoc = myMSWord.Documents.Open(inval)

'myMSDoc = myMSWord.Documents.Open(myNewsLetter)

...但我在Open语句中遇到类似错误......

An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in KA_Newsletter.exe

Additional information: Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

MS页面说你应该尝试像

这样的东西
Dim inval As Object
'Marshal the object before passing it to the method.
inVal = New System.Runtime.InteropServices.DispatchWrapper(myNewsLetter)
myMSDoc = myMSWord.Documents.Open(inval)