• <td id="ae6ms"><li id="ae6ms"></li></td>
  • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
  • <table id="ae6ms"></table>
  • <td id="ae6ms"></td>
    <td id="ae6ms"></td>
  • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
  • <td id="ae6ms"></td>
  • <table id="ae6ms"><li id="ae6ms"></li></table>
  • <table id="ae6ms"></table>
    西西軟件園多重安全檢測下載網站、值得信賴的軟件下載站!
    軟件
    軟件
    文章
    搜索

    首頁編程開發其它知識 → Microsoft.Office.Interop.Word.ApplicationClass錯誤的解決方案

    Microsoft.Office.Interop.Word.ApplicationClass錯誤的解決方案

    相關軟件相關文章發表評論 來源:西西整理時間:2015/1/9 23:00:46字體大?。?em class="fontsize">A-A+

    作者:西西點擊:3790次評論:0次標簽: Office

    • 類型:桌面工具大?。?i>1KB語言:繁體 評分:7.6
    • 標簽:
    立即下載

    &#65279;&#65279;&#65279;無法將類型為“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 對象強制轉換為接口類型“Microsoft.Office.Interop.Word._Application”。此操作失敗的原因是對 IID 為“{00020970-0000-0000-C000-000000000046}”的接口的 COM 組件調用 QueryInterface 因以下錯誤而失敗: 加載類型庫/DLL 時出錯。 (異常來自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。

    生成word的過程中如上報錯。

    解決方法:

    1.打開任務管理器,如果任務管理器中有很多word相關的進程,關閉之。

    2.如果關閉后仍然無效,你要考慮下,你的電腦上是不是曾經安裝過金山的wps辦公軟件。如果曾安裝過并且現在已經卸載,那么請重新下載最新的wps辦公套件安裝。就ok了。

    類型"Microsoft.Office.Interop.Word.ApplicationClass"未定義構造函數 
    解決辦法:解決方案資源管理器 -> 引用 -> "Microsoft.Office.Interop.Word" -> 右鍵選擇屬性 -> 嵌入互操作類型的值改為"false"即可。

    就軟件而言,互操作性——這條術語用來描述的是不同的程序(programs)借助于同一套交換格式(exchange formats)來交換數據,讀寫相同文件格式(file formats)以及采用相同協議(protocols)的能力。(互操作性的這種定義并‘沒有’期望那種在不同處理器平臺<processor platforms >之上執行相同二進制代碼<binary code>的能力。)互操作性的缺乏可能是在程序設計期間對于標準化(standardization)缺乏重視的一種后果。實際上,在計算機世界(computing world)的那些并未基于標準的部分當中,互操作性也的確并非理所當然的事情。

    根據國際標準ISO/IEC 2382-01 信息技術詞表,基礎術語(ISO/IEC 2382-01, Information Technology Vocabulary, Fundamental Terms),互操作性定義如下:“在幾乎或幾乎無須用戶了解各種功能單元的獨特特性的情況下,這些功能單元之間進行通訊、執行程序或者傳輸數據的能力”。以上兩段是維基百科對“互操作性”的解釋,讓我們對“嵌入互操作類型”有了個基本的概念。

    那就接著講什么叫“嵌入互操作類型”,下面是摘自msdn雜志上的一段??赡軙o我們一些啟迪和認識。

    嵌入 COM 互操作類型

    這更像是 C# 編譯器功能,而不像是 C# 語言功能,但您現在可以使用 COM 互操作程序集,而不要求該程序集在運行時必須存在。目的是減輕將 COM 互操作程序集與您的應用程序一起部署的負擔。

    當 COM 互操作在最初版本的 .NET Framework 中引入時,就確立了主互操作程序集 (PIA) 的概念。引入此概念,是為了解決在組件之間共享 COM 對象的難題。for instance:如果您有一些不同的互操作程序集,分別定義了一個 Excel Worksheet,則我們無法在組件之間共享這些 Worksheet,因為它們具有不同的 .NET 類型。PIA 通過只存在一次而解決了這個難題:所有客戶端都使用它,因此 .NET 類型始終是匹配的。

    盡管 PIA 在理論上是個好主意,但在實際部署中卻被證明是個大麻煩,因為它只有一份,而有多個應用程序可能會嘗試安裝或卸載它。而由于 PIA 通常很大,事情更復雜了。Office 在默認 Office 安裝方式中并未部署它們,用戶只需通過使用 TLBIMP 來創建自己的互操作程序集,即可輕松繞過這一個程序集系統。

    因此,現在為了扭轉這種局面,發生了兩件事:

    對于兩個結構相同且共享相同識別特征(名稱、GUID 等)的 COM 互操作類型,運行時能夠聰明地將其看作同一個 .NET 類型。C# 編譯器利用這一點的方式是在編譯時直接在您自己的程序集中重現互操作類型,因此不再要求在運行時存在該互操作程序集。

    由于篇幅所限,我不得不省略一些詳細信息,但即使不了解這些信息,您也應該能夠毫無障礙的使用這個功能,就像動態功能一樣。您通過將引用上的“嵌入式互操作類型”屬性設置為 true,告訴編譯器為您將互操作類型嵌入到 Visual Studio 中。

    由于 C# 團隊希望這種方法成為引用 COM 程序集的首選方法,因此在默認情況下,Visual Studio 會將添加到 C# 項目中的任何新互操作引用的此屬性設置為 True。如果您使用命令行編譯器 (csc.exe) 來編譯您的代碼,請使用 /L 開關,而不是 /R 開關,來嵌入您必須引用的互操作程序集中的互操作類型。

    類型“Microsoft.Office.Interop.Word.ApplicationClass”未定義構造函數

    錯誤 4317 無法嵌入互操作類型“Microsoft.Office.Interop.Word.ApplicationClass”。請改用適用的接口。 

    類型“Microsoft.Office.Interop.Word.ApplicationClass”未定義構造函數 

    解決辦法: 

    在Visual Studio 中點擊菜單項“視圖->解決方案資源管理器”,在其中點開“引用”文件夾,在"Microsoft.Office.Interop.Word" 上點擊鼠標右鍵,選擇“屬性”,將屬性中的“嵌入互操作類型”的值改為“false”即可。

    HRESULT:0x80030002 無法將類型為“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 對象強制轉換為接口類型“Microsoft.Office.Interop.Wor

    無法將類型為“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兼容性真不好搞,目前也沒有一套完美的解決方案,希望大牛指導。

    Interop type 'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded

    'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded. Use the applicable interface instead.

    解決方法:

           In your Project, expand the "References", find the Microsoft Office Interop reference. Right click it and select properties, and change "Embed Interop Types" to false.

    如下圖:

      相關評論

      閱讀本文后您有什么感想? 已有人給出評價!

      • 8 喜歡喜歡
      • 3 頂
      • 1 難過難過
      • 5 囧
      • 3 圍觀圍觀
      • 2 無聊無聊

      熱門評論

      最新評論

      發表評論 查看所有評論(0)

      昵稱:
      表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
      字數: 0/500 (您的評論需要經過審核才能顯示)
      女人让男人桶30分钟免费视频,女人张开腿让男人桶个爽,一进一出又大又粗爽视频
    • <td id="ae6ms"><li id="ae6ms"></li></td>
    • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
    • <table id="ae6ms"></table>
    • <td id="ae6ms"></td>
      <td id="ae6ms"></td>
    • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
    • <td id="ae6ms"></td>
    • <table id="ae6ms"><li id="ae6ms"></li></table>
    • <table id="ae6ms"></table>