2010-01-05 4 views
1

나는 atl COM dll, dual을 작성했습니다. 그리고 C# GUI proj에서 intreace X 중 하나를 사용했습니다. X.F()를 호출하면 System.InvalidCastException이 발생하고 namespace.XClass를 namespace.IX로 캐스팅 할 수 없으며 QueryInterface가 실패했습니다. BADTYPE. 그 전화는 내 실에 있었다.COM 인터페이스를 사용하는 경우 System.InvalidCastException

코드를 GUI 스레드로 옮기면 잘 작동합니다.

도와주세요. 고마워.

답변

2

COM 객체는 종종 그들은 단지 그들에게

+0

Paul 감사합니다. COM 객체를 만든 스레드에서 COM obj를 사용했습니다. 그러나 GUIthread에서 아닙니다. 모든 코드를 새 스레드로 이동하면 작동합니다. – ahpho

+0

엄밀히 말하면 STA 개체는 다른 스레드에서도 사용할 수 있지만 인터페이스 포인터를 마샬링해야합니다. COM이 인터페이스를 마샬링 할 수 없으면 질문에서와 같이 오류 표시가 나타납니다. – sharptooth

2

COM을 만든 스레드에 의해 사용될 수 있다는 것을 의미 개체를 만든 스레드에 스레드에서 호출을 마샬링 프록시/스텁이 필요 STA이다. QKI가 HKCR \ Interface 레지스트리 키에서 찾을 수 없으면 QI가 실패합니다.

관련 문제