我要通过一个已知LPDISPATCH,来初始化一个对象,但是这个对象的类不确定,也就是我要先判断LPDISPATCH是什么类,再去定义那个对象,如何判断?或应如何做?能否给个例子。谢了

解决方案 »

  1.   

    调用IDispatch::GetTypeInfo()得到一个ITypeInfo指针。从ITypeInfo接口就可以得到类型信息。
      

  2.   

    呵呵code:
    看到你的帖子了,怎么样:解决没有?
    你把你的代码铁一段出来看看,你是怎么用的?
      

  3.   

    VB中有这样一段:
    If TypeOf m_layer.Renderer Is MapObjects2.GroupRenderer Then
    '这里调用MapObjects2.GroupRenderer 的方法
    elseif TypeOf m_layer.Renderer Is MapObjects2.ValueMapRenderer Then
    '这里调用MapObjects2.ValueMapRenderer 的方法
    end ifVC中:
    m_layer->GetRenderer()//返回的是一个LPDISPATCH
    要实现的伪码 
    if (m_layer->GetRenderer() is MapObjects2.GroupRenderer) //???
            {
                      CMoGroupRenderer m_renderer(m_layer->GetRenderer());
                      //这里调用MapObjects2.GroupRenderer的方法
            }
           else
    ....
    ???处如何实现
      

  4.   

    我用m_layer->GetRenderer()->GetTypeInfo(0,0,&ppTInfo);怎么ppTInfo 为''
      

  5.   

    IDispatch *pdisp;
    IDispatchEx *pdispex;
    ITypeInfo *ppTInfo;
    pdisp = m_layer->GetRenderer();
    int icount;
    DISPID dispid;
    HRESULT hr = pdisp->GetTypeInfoCount(&icount);
    if(hr == S_OK && icount > 0)
       pdisp->GetTypeInfo(0,dispid,&ppTInfo);
      

  6.   

    使用MicroSoft Tools->OLE View 查看
      

  7.   

    如果icount 为0,说明GetTypeInfo无法得到对象的信息。
    你手头又没有《com编程内幕》之类的书,好像潘写的。
      

  8.   

    另外看看这个有没有启发:
    http://expert.csdn.net/Expert/topic/1098/1098494.xml?temp=2.706546E-02
    其实我也不大懂,回去看了看,里面的东西太多了:)
      

  9.   

    1. you can 
    try
    {
    CMoGroupRenderer m_renderer(m_layer->GetRenderer());
    ...
    }
    catch(...)
    {
    //m_layer->GetRenderer() is not valid CMoGroupRenderer 
    }2. you can use 
    LPDISPATCH lpDisp=m_layer->GetRenderer();
    HRESULT hr=lpDisp->QueryInterface(IID_GetRenderer,...);
    if(SUCCEEDED(hr))
    {
    ...
    }