实现多接口的有关问题[dual 双接口],分不够可以再加
实现多接口的问题[dual 双接口],在线等,分不够可以再加
接口类实现如下,对应的idl修改正确。
class CImageCombine :
public IDispatchImpl <IImageCombine, &IID_IImageCombine, &LIBID_PRINTPREGENLib> ,
public ISupportErrorInfo,
public CComObjectRoot,
public CComCoClass <CImageCombine,&CLSID_ImageCombine> ,
public IDispatchImpl <IImageCombine2, &IID_IImageCombine2, &LIBID_PRINTPREGENLib>
{
public:
CImageCombine() {}
BEGIN_COM_MAP(CImageCombine)
COM_INTERFACE_ENTRY(IImageCombine)
COM_INTERFACE_ENTRY2(IDispatch,IImageCombine)
COM_INTERFACE_ENTRY(IImageCombine2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
......
}
错误如下:
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : warning C4003: not enough actual parameters for macro 'COM_INTERFACE_ENTRY2 '
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : error C2065: 'IDispatch,IImageCombine ' : undeclared identifier
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : error C2061: syntax error : identifier 'IDispatch,IImageCombine '
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : error C2146: syntax error : missing '( ' before identifier 'IDispatch,IImageCombine '
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : error C2552: 'ATL::_ATL_INTMAP_ENTRY::piid ' : non-aggregates cannot be initialized with initializer list
1> 'const IID * ' is not an array or class : Types which are not array or class types are not aggregate
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(28) : error C2078: too many initializers
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(29) : error C2440: 'initializing ' : cannot convert from 'const _GUID * ' to 'DWORD_PTR '
------解决方案--------------------
这样是正确的,请检查
接口类实现如下,对应的idl修改正确。
class CImageCombine :
public IDispatchImpl <IImageCombine, &IID_IImageCombine, &LIBID_PRINTPREGENLib> ,
public ISupportErrorInfo,
public CComObjectRoot,
public CComCoClass <CImageCombine,&CLSID_ImageCombine> ,
public IDispatchImpl <IImageCombine2, &IID_IImageCombine2, &LIBID_PRINTPREGENLib>
{
public:
CImageCombine() {}
BEGIN_COM_MAP(CImageCombine)
COM_INTERFACE_ENTRY(IImageCombine)
COM_INTERFACE_ENTRY2(IDispatch,IImageCombine)
COM_INTERFACE_ENTRY(IImageCombine2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
......
}
错误如下:
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : warning C4003: not enough actual parameters for macro 'COM_INTERFACE_ENTRY2 '
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : error C2065: 'IDispatch,IImageCombine ' : undeclared identifier
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : error C2061: syntax error : identifier 'IDispatch,IImageCombine '
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : error C2146: syntax error : missing '( ' before identifier 'IDispatch,IImageCombine '
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(27) : error C2552: 'ATL::_ATL_INTMAP_ENTRY::piid ' : non-aggregates cannot be initialized with initializer list
1> 'const IID * ' is not an array or class : Types which are not array or class types are not aggregate
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(28) : error C2078: too many initializers
1> e:\dev project\pregen\devpregen\printpregen\imagecombine.h(29) : error C2440: 'initializing ' : cannot convert from 'const _GUID * ' to 'DWORD_PTR '
------解决方案--------------------
这样是正确的,请检查