2011-04-18 44 views
2

我在.Net Web應用程序中使用COM DLL。這適用於多個不同的機器。
但是,在一臺特定的機器上,我收到以下錯誤:COM異常 - TYPE_E_CANTLOADLIBRARY?

無法將類型爲'CServer.CApplicationClass'的COM對象轉換爲接口類型'CServer.ICApplication'。此操作失敗,因爲具有IID'{CF0DFA28-046B-4C7D-8AA9-F4B7477D8CAE}'的接口的COM組件上的QueryInterface調用由於以下錯誤而失敗:加載類型庫/ DLL時出錯。 (來自HRESULT的異常:0x80029C4A(TYPE_E_CANTLOADLIBRARY))。

我已經使用regsvr32命令註冊了dll。
我也爲這個DLL創建了一個COM +應用程序。 在註冊表中運行搜索
我可以在許多地方找到密鑰。 我也嘗試註銷DLL並刪除計算機上的所有引用到此dll。之後重新添加該DLL並重新註冊它。

我寫了一個測試dll的簡單windows腳本文件。這工作正常。但是,我的.net項目中存在的問題在iis中運行。

誰能幫助我?..

如果需要再信息,請發表評論。謝謝。

+1

什麼是您的服務器? 64/86?你的應用程序池設置爲?什麼是建立COM組件? – 2011-04-18 16:04:03

+0

Windows 7專業版64位..應用程序池設置爲應用程序池設置爲.NET Framework v2.0.50727。 COM程序集允許我的應用程序訪問\調用一些用delphi編寫的遺留代碼。 – shane87 2011-04-18 16:27:41

+0

這是你安裝它的第一個64位服務器嗎? – 2011-04-18 16:45:09

回答

0

確保您的AppPool已設置爲x86。還要確保您的程序集僅針對x86。

+0

你的意思是允許應用程序池啓用32位應用程序? – shane87 2011-04-18 16:38:32

+0

是的............ – 2011-04-18 16:40:07

+0

不幸的是,沒有工作:( – shane87 2011-04-18 16:40:23

0

我有類似的問題。首先得到了拒絕訪問,這在一些環顧四周後解決了,只能面對這個錯誤信息(TYPE_E_CANTLOADLIBRARY)。記住,我正在運行的COM +組件在Windows 7

其中涉及與註冊表搞亂一些徒勞的嘗試後,我的同事和我發現得到它運行起來的一種方式:

1)取消註冊DLL(REGSVR32 -u的Dllname)

2)確保該DLL的引用從註冊表(先備份)

3)創建組件服務的空COM +應用程序(服務器應用程序)清理

4)Co PY應用程序ID到剪貼板

5)進入 「C:\ Program Files文件(x86)的\ COMPLUS應用程序」,並在你的剪貼板創建一個ID文件夾

6)拷貝你的DLL到該文件夾並註冊

7)回到你的組件服務和組件添加到您使用的DLL創建的應用程序 「C:\ Program Files文件(x86)的\ COMPLUS應用{*應用程序ID *}」

這是爲我做的。希望能幫助到你。

0

我有一個類似的問題,與「TYPE_E_CANTLOADLIBRARY」消息。

背景: 我有一個使用Interop.ReferenceA.dll的項目。該文件是使用tlbimp ReferenceA創建的。dll/out:Interop.ReferenceA.dll。

解決方案: 當我看了看ReferenceA.dll使用RegDllView我注意到ReferenceA.dll有一個子類,這是在錯誤信息中顯示的IID。 我環顧了子類的源代碼並注意到它對Interop.ReferenceB.dll有依賴關係。

原來,子類需要Interop.ReferenceB作爲類型庫的工作。於是我就這樣:

regasm /tlb:Interop.ReferenceB.tlb Interop.ReferenceB.dll(使用regasm的32位版本。)

和錯誤走了。