描述:
自定义了一个CBmpToolBar,是基于CToolBar的,在一个类中创建一个CBmpToolBar的对象,现在
想为这个类实现一个接口,在类的外部可以通过这个接口Get到这个CBmpToolBar对象的指针,这样在其他的类中就可以使用这个CBmpToolBar对象了,这个接口应该如何实现呢?
现在我是用MFC的嵌套类实现的,但是有问题,请大侠帮我看一下:
//嵌套类中的函数
HRESULT CMailModule::XMail::GetToolBar(BYTE* pToolBar)
{
METHOD_PROLOGUE_EX(CMailModule,Mail)
pThis->GetToolBar(pToolBar);
if(pToolBar) return S_OK;
}
//类中的函数
HRESULT CMailModule::GetToolBar(BYTE* pToolBar)
{
pToolBar = (BYTE*)&(m_pMainFrame->m_wndToolBar);
return S_OK;
}
IDL文件中的接口:
interface IMail : IUnknown
{
HRESULT GetToolBar([out,retval] BYTE* pToolBar);
}
请大侠指教,谢谢!
解决方案1:
返回一个IDispatch *的pointer
pp = (IDispatch *)CToolBar::GetInterface(&IID_IUNKOWN);
在用的地方
toolbar = (CToolBar *)(CCmdTarget::FromIdispatch(pp));
返回该toolbar的CWnd指针不行吗?用LONG型try一下?
解决方案3: 我是直接返回CWnd*的,但是没有用IDL
顺便说一下,返回指针要用**,参见queryinterface的实现