2009-07-10 284 views
2

我有一個COM對象,我在我的測試C#解決方案中導入。 一切工作正常,並繼續這樣做。COM互操作對象拋出InvalidCastException在一個項目中,但不在其他

然後,我在我的實際解決方案中導入了相同的COM對象,並且在測試項目中執行了與測試項目完全相同的行
當我運行真正的項目中,我得到一個InvalidCastException

無法投類型的COM對象CTWebReport.WebReportCOMClass「接口類型「CTWebReport.IWebReportCOM」。此操作失敗,因爲具有IID「{5DFA18E8-4E71-4ADC-A812-6B166C242561}」的接口的COM組件上的QueryInterface調用由於以下錯誤而失敗:沒有此類接口支持(異常來自HRESULT:0x80004002(E_NOINTERFACE)) 。

我搜索了我的整個系統,以便對interop和com庫的每個引用進行搜索,其中包括我可以找到的所有bin和obj文件夾。 除了最初的COM庫,我把它們都刪除了,爲了清理掉我的回收站。
沒有區別,完全相同的情況。測試項目的作品,真正的項目不。

編輯
看來,COM工程的WinForms應用程序,而不是在我的課librar(由一個asp.net的MVC Web applicatoin消耗)。

我不知道接下來要做什麼。建議?

+0

我曾經經歷過類似的行爲 - 問題在於界面不是自動化兼容的,我在不同情況下打開或關閉了編組。它在編組過程中一切正常,但無法通過編組來檢索界面。 – sharptooth 2009-07-10 10:21:13

+0

謹慎闡述?在這兩個項目中,編組都是由.net本身完成的(自動生成的interop類)。 – 2009-07-10 10:23:57

+0

我試着CoCreateInstance一個組件與自動化不兼容的接口。首先它只是regsvr32'd,我在32位C++程序中調用了CoCreateInstance() - 它工作正常。當我將組件加入COM +(使其在單獨的進程中運行)時,CoCreateInstance在同一個32位程序中現在返回E_NOINTERFACE。 – sharptooth 2009-07-10 11:03:20

回答

2

區別在於線程。 winform線程從主線程執行代碼,而asp.net沒有。它通過在STAThread中顯式運行COM來解決。

0

由於您的COM組件在WinForm應用程序中工作,但不在ASP.NET中,因此我認爲您可能會遇到一些權限問題。您是否可以暫時提升運行ASP.NET的權限(例如管理員)並查看您是否可以執行該組件?

相關問題