0

我正在使用C#編寫的Windows運行時組件,用於包裝一些沒有Windows運行時等效項的COM接口,其中this MSDN example使用interop接口由mbnapi.tlb提供。當我嘗試實例我IMbnInterfaceManager成員在包裝類的構造函數,像這樣:無法在Windows運行時組件中實例化COM互操作接口

m_InterfaceManager = (IMbnInterfaceManager)new MbnInterfaceManager(); 

它拋出由於E_NOINTERFACE一個System.InvalidCastException(支持沒有這樣的接口)。但是,如果我將我的包裝器構建爲類庫而不是WinMD組件,它可以很好地工作,不會有其他更改。

我寧願將它作爲Windows運行時組件來構建,以免限制庫的用處。 (至少有一個這樣的項目是用Javascript/HTML編寫的。)我做錯了什麼,或者是我試圖做不到的事情?

編輯:原來它是.NET 4.5 RC中的一個錯誤。如果有其他人遇到此問題,請在此留下此問題,如果找到問題,我會發布解決方法。據推測,它將由RTM修復。

+0

線程是神祕的E_NOINTERFACE錯誤的常見原因。 –

+0

這是我試圖自行研究這個問題的印象 - 但執行路徑_seems_與它構建爲Windows Runtime組件還是類庫相同。在這兩種情況下,它都是嘗試實例化類的主要UI線程。 – spwert

回答

0

這已被確認爲.NET 4.5 RC中的一個錯誤,據稱將由RTM修復。當前的解決方法是編輯.csproj文件並將EmbedInteropTypes設置爲False以引用tlb/dll。這可能會導致App Store認證測試失敗,因此一旦.NET錯誤得到修復,一定要將其設置爲True。