描述:
各位前辈,我初学ATL,请多多指教:
我遇到一个问题,我想给容器,暴露两个方法,但参数不同,怎么办?我尝试了几种方法都不成功,或者您看我错在什么地方了,或者我的思路本来就是错的.
下面是简单的代码:
...
__interface IECWeb:public inteface
{
[id(1)] HRESULT SC(IDispatch** pDispatch);
};
__interface IECWeb2:public inteface
{
[id(1)] HRESULT SC(VARIANT scname,IDispatch** pDispatch);
};
class CECweb:
public IDispatchImpl<IECWeb,&__uuidof(IECWeb)>,
public IDispatchImpl<IECWeb2,&__uuidof(IECWeb2)>,
......
{
....
BEGIN_COM_MAP(CECWeb)
COM_INTERFACE_ENTRY(IECWeb)
COM_INTERFACE_ENTRY(IECWeb2)
COM_INTERFACE_ENTRY2(IDispatch,IECWeb)
END_COM_MAP()
.....
STDMETHOD(sc)(IDispatch** pDispatch)
{
MessageBox("is no parameter");
return S_OK;
}
STDMETHOD(sc)(VARIANT scname,IDispatch** pDispatch)
{
MessageBox("is parameter");
return S_OK;
}
};
在IE上调试的时候.
....
dim obj
set obj=CreateObject("CECWeb.web")
obj.sc("l") 这儿成功弹出对话框.
obj.sc 这儿就失败了.
我不知道,错在什么地方了,请各位前辈和高手,帮帮忙,指点一下...谢谢!
解决方案1:
IDL中的定义如下:
[id(0), helpstring("method Read")] HRESULT XXX([in,optional,defaultvalue(0)]VARIANT &invt,[out,retval]VARIANT *pvarResult);