2010-01-05 55 views
1

我寫了一個atl COM DLL,雙重。並且在C#GUI proj中使用了它的一個無處不在的X.當調用X.F()時,我得到一個System.InvalidCastException,無法將namespace.XClass轉換爲namespace.IX,QueryInterface失敗:BADTYPE。電話是在我自己的線程。System.InvalidCastException當使用COM接口

如果我將代碼移動到GUI線程,它工作得很好。

請幫助我。非常感謝。

回答

2

COM對象往往是STA時,這意味着它們只能通過創建它們

+0

謝謝Paul。我確實在創建它的線程中使用了COM obj。但不在GUIthread中。如果將所有代碼移動到新的線程,它就可以工作。 – ahpho 2010-01-05 03:42:29

+0

嚴格來說,STA對象也可以用於其他線程,但這需要編組接口指針。如果COM無法編組界面,您會看到問題中的錯誤指示。 – sharptooth 2010-01-06 09:10:48

2

COM的線程中使用需要代理/存根從線程的調用編組到創建該對象的線程。如果在HKCR \ Interface註冊表項中找不到它,QI將會失敗。