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 .... ???处如何实现
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)) { ... }
看到你的帖子了,怎么样:解决没有?
你把你的代码铁一段出来看看,你是怎么用的?
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
....
???处如何实现
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);
你手头又没有《com编程内幕》之类的书,好像潘写的。
http://expert.csdn.net/Expert/topic/1098/1098494.xml?temp=2.706546E-02
其实我也不大懂,回去看了看,里面的东西太多了:)
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))
{
...
}