2010-04-08 95 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