我正在使用第三方dll開發我的應用程序,它是一個COM對象。我試圖使我的應用程序隔離,使用COM免註冊。但我無法找到很好的示例/步驟/教程來了解如何做到這一點。請告訴我我所做的是正確還是錯誤。COM例外:80040154,已經提供了清單
我爲原始dll創建了清單,使用tlbimp.exe生成了一個tyle庫,添加了作爲項目引用的類型庫,並正常地實例化了這個對象。儘管我已經提供的清單文件,我還收到此錯誤:
System.Runtime.InteropServices.COMException was unhandled
Message=Retrieving the COM class factory for component with CLSID {7B3A2D19-1D82-4DF6-8939-B730058A5535} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Google搜索這一點,這似乎是一個很多人指着構建配置,但我已經把我的構建中使用的x86。我很確定這個DLL也是在x86環境下開發的。 (我不知道這是否是相關或不..)
我所做的:
- 不刪除DLL內的內部RT_MANIFEST提供外部清單。
- 使用mt.exe更新RT_MANIFEST。
- 使用由上述兩者生成的類型庫。
順便說一句,我也很好奇哪些FILEVERSION或PRODUCTVERSION號碼,我應該用於清單內的版本元素? (我都嘗試,既不工作)
Properties showing FileVersion and ProductVersion http://i40.tinypic.com/qpjymf.png
請告訴我在哪裏我做錯了什麼?我是否爲清單提供了錯誤信息?我怎麼知道我需要更多的清單信息?
如果您需要更多信息,請讓我知道。謝謝大家。
據我所知,Windows將優先考慮內部而不是外部(對於Windows Server 2003和更高版本的Windows,爲true)。所以我嘗試使用mt.exe在DLL和exe文件中嵌入清單。仍然不起作用。 不,更改註冊表設置不是一個好主意。 :( – 2012-04-12 07:32:59