- 产生一个ATL的组件程序框架(例子程序中,使用的是DLL)
- 添加一个IAAA的双接口
- 手工添加另一个IBBB的双接口
IDL文件修改如下:
... ...
[
object,
uuid(D17A119E-0FEC-4737-8EBD-4AA040393A36), //这里是例子程序中的IID,你需要自己产生
dual,
helpstring("IBBB Interface"),
pointer_default(unique)
]
interface IBBB : IDispatch
{
};
... ...
coclass AAA
{
[default] interface IAAA;
interface IBBB; //这是手工添加的第2个接口
};
头文件,修改如下:
添加派生关系
class ATL_NO_VTABLE CAAA :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CAAA, &CLSID_AAA>,
public IDispatchImpl<IAAA, &IID_IAAA, &LIBID_ATLDISPLib>,
public IDispatchImpl<IBBB, &IID_IBBB, &LIBID_ATLDISPLib> //新增
添加并修改接口入口宏
BEGIN_COM_MAP(CAAA)
COM_INTERFACE_ENTRY(IAAA)
COM_INTERFACE_ENTRY(IBBB) //新增
//修改,使用ENTRY2方式,这样VB才能知道默认使用哪个IDispatch接口
COM_INTERFACE_ENTRY2(IDispatch,IAAA)
END_COM_MAP()
- 在IAAA中,添加属性BBB,类型为LPDispatch,只实现Get方法
STDMETHODIMP CAAA::get_BBB(LPDISPATCH *pVal)
{
QueryInterface(IID_IBBB,(LPVOID *)pVal);
return S_OK;
}
- 在IBBB中,添加方法(例子程序中,实现了一个数值加法)
HRESULT Add([in] long n1,[in] long n2, [out,retval] long *pnSum);