HRESULT:0x80030002
無法將類型為“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 對象強制轉換為接口類型“Microsoft.Office.Interop.Word._Application”。此操作失敗的原因是對 IID 為“{00020970-0000-0000-C000-000000000046}”的接口的 COM 組件調用 QueryInterface 因以下錯誤而失敗: 找不到 。 (異常來自 HRESULT:0x80030002 (STG_E_FILENOTFOUND))。
上次是 HRESULT:0x80004002(E_NOINTERFACE),修復了一下office變成如上所示。
出現原因:可能是安裝office時安裝過不同版本造成的。
本人安裝的是office 2003,並安裝過office2007的兼容包,也安裝過office visio 2007
解決辦法:
在注冊表中找到:HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.6 刪除之就可以了。
因為我用的是office 2003對應的是1.5,所以刪除1.6
office 2007對應的是1.6,所以要根據情況判斷。(我的是安裝了2007之后有安裝了2010,10可以,07不可以,我后來卸載掉10,用07版測試發現該注冊表項下1.7還在,所以刪除掉1.7,07版就正常了)
后記:
一般來說,一個COM對象在提供的時候,通常還會提供一個類型庫,在其中定義了COM對象的所有方法名稱、參數名稱、屬性名稱等等信息。我們要做的就是從類型庫中取出這些信息。當然,某些只供C++程序員使用的COM對象沒有類型庫,而代之以C++的頭文件和/或idl文件,對這種情況,一般沒有辦法在程序中枚舉出對象的方法屬性:畢竟去找C++頭文件不太現實,何況在非開發環境下,根本就沒有頭文件的說。
在一般情況下,COM對象的TypeLib信息存儲在注冊表中:在HK_CLASSROOT\CLSID\{ClassID}\的注冊表項下,有一個名為TypeLib的子項,其中定義了這個COM對象類型庫的ID;而在HK_CLASSROOT\TypeLib 注冊表項下,列舉了系統中所有TypeLib。
PS:word兼容性真不好搞,推薦NPOI。