请教一个ATL的参数传递问题

qianqian 2003-08-08 05:46:51
我在接口中定义了2个simple object

一个叫CServerInfo,对应的接口是IServerInfo
另外一个叫CBaseTool,对应的接口是IBaseTool

现在的问题是,我想给BaseTool类增加一个包含CServerInfo参数的方法
例如

HandleServerInfo(IBaseInfo *baseInf)

可是它的IDL老是编译不通过

[id(1), helpstring("method HandleRequest")] HRESULT HandleServerInfo(IServerInfo sInfo);

错误
interfaces may only be used in pointer-to-interface constructs : [ Interface 'IServerInfo' ( Parameter 'sInfo' ) ]

换成CServerInfo也不对啦

琢磨了很久,因为对ATL不熟悉,请各位大虾指教!

我对ATL很菜....

...全文
98 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
arxing 2003-08-14
  • 打赏
  • 举报
回复
撇开ATL不说,你这是一般的C++错误,IServerInfo是个不完整的class,能作为参数IServerInfo sInfo吗?
改称IServerInfo* pInfo吧。
yangzhb2003 2003-08-14
  • 打赏
  • 举报
回复
up
yxmaomao88 2003-08-08
  • 打赏
  • 举报
回复
ATL中不能这样实现,不知道你具体要什么功能
如果你想在一个接口(CMBCom)中抛出另一个接口(CMBLog),
请参考:
STDMETHODIMP CMBCom::Log(VARIANT *pVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
CComVariant m_pLogVariant;
VariantInit(pVal);
pVal->vt = VT_UNKNOWN;
pVal->punkVal = NULL;

CComObject<CMBLog> * m_pLog;
HRESULT hres = CComObject<CMBLog>::CreateInstance(&m_pLog);
LPDISPATCH lpDisp = NULL;
HRESULT hRes = NULL;
hRes = m_pLog->QueryInterface(IID_IDispatch,(void**)&lpDisp);
if ( hRes == S_OK )
{
m_pLogVariant.vt = VT_DISPATCH;
m_pLogVariant.pdispVal = lpDisp;
hRes = VariantCopy(pVal,&m_pLogVariant);
}

return S_OK;
}

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧