我现在在写一个dll(son.dll),该dll要继承另外一个dll(father.dll)里的一个接口(例如:IMyInterface)该接口将在son.dll中被实现。我的写法是这样的:
//son.h
#include "father.h"
#include "father_i.c"class ATL_NO_VTABLE CSon :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSon, &CLSID_Son>,
public ISupportErrorInfo,
public IDispatchImpl<ISon, &IID_ISon, &LIBID_SonLib>,
public IMyInterface
{
......BEGIN_COM_MAP(CMLTest)
COM_INTERFACE_ENTRY(IMLTest)
COM_INTERFACE_ENTRY_IID(IID_IDispatch,IMLTest)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IMyInterface)
END_COM_MAP()
......
}//son.idl
import "oaidl.idl";
import "ocidl.idl";
import "son.idl";
[
object,
uuid(CCE47DEC-B40C-4831-B5EE-5C404A9A8F36),
dual,
helpstring("ISon Interface"),
pointer_default(unique)
]
interface ISon : IDispatch
{
};......
coclass Son
{
[default] interface ISon;
interface IMyInterface ;
};
};我想这样就应该对了,但是总是编译不过。不知道是father组件需要支持一些什么还是我的son组件继承的写法不对。
另:father组件也是用atl模板生成的(simple object)com组件,但是IMyInterface在该组件中没有实现只是做了声明。
//son.h
#include "father.h"
#include "father_i.c"class ATL_NO_VTABLE CSon :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSon, &CLSID_Son>,
public ISupportErrorInfo,
public IDispatchImpl<ISon, &IID_ISon, &LIBID_SonLib>,
public IMyInterface
{
......BEGIN_COM_MAP(CMLTest)
COM_INTERFACE_ENTRY(IMLTest)
COM_INTERFACE_ENTRY_IID(IID_IDispatch,IMLTest)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IMyInterface)
END_COM_MAP()
......
}//son.idl
import "oaidl.idl";
import "ocidl.idl";
import "son.idl";
[
object,
uuid(CCE47DEC-B40C-4831-B5EE-5C404A9A8F36),
dual,
helpstring("ISon Interface"),
pointer_default(unique)
]
interface ISon : IDispatch
{
};......
coclass Son
{
[default] interface ISon;
interface IMyInterface ;
};
};我想这样就应该对了,但是总是编译不过。不知道是father组件需要支持一些什么还是我的son组件继承的写法不对。
另:father组件也是用atl模板生成的(simple object)com组件,但是IMyInterface在该组件中没有实现只是做了声明。
import "oaidl.idl";
import "ocidl.idl";
import "son.idl"; // 是不是 father.idl?
error C2259: 'CComObject<class CMLTest>' : cannot instantiate abstract class due to following members: d:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CMLTest> >::CreateInstance(void *,const struct _GUID &,voi
d ** )'
先生成father.dll,然后在classview中右击CSon,选择Implement Interface,然后再点击"Add TypeLib",选中father.dll就可以了