2010-04-08 91 views
1

我查詢一個MFC實現被實現COM對象如下實施:枚舉列表通過C#COM互

class CA : 
    public MfcComLib::IA 
{ 
    ... 
}; 

class CB : 
    public MfcComLib::IB 
{ 
    ... 
}; 

class ATL_NO_VTABLE CExposedCoClass : 
    public CComObjectRootEx<CComSingleThreadModel>, 
    public CA, 
    public CB 

{ 
public: 

BEGIN_COM_MAP(CExposedCoClass) 
    COM_INTERFACE_ENTRY(MfcComLib::IA) 
    COM_INTERFACE_ENTRY(MfcComLib::IB) 
END_COM_MAP() 

在C#側我收到該來通過作爲一個IUnknown PTR一個東西。我已經導入了TypeLib並獲得了接口MfcComLibLib.IA,但是當我施放時,由於未實現接口,導致我失敗。

有沒有辦法查詢IUnknown指針來發現對象上實際實現了哪些接口?

回答

0

與託管接口相同。您使用C#isas運營商。 CLR會將其映射到QueryInterface調用。

+0

問題是我不知道對象具有什麼接口,所以是或者不行,因爲它們要求我有一個接口來分配給演員。 COM包裝的行爲不正確,我試圖探索數據以找出實際存在的內容。 – 2010-04-09 15:31:17

+0

COM對象不必公開它實現的接口。但是如果它實現了IDispatch,你可以嘗試調用IDispatch :: GetITypeInfo並以這種方式獲得實現的接口。 – 2010-04-19 15:44:33

+0

好吧,我將通過接受你的評論和答案來說明一般情況下我所要求的不能完成的事情。在實際情況中,這個問題與線程問題有關,我以另一種方式解決了這個問題。 – 2010-07-12 19:59:52