1:假设我们已经比较熟悉COM了(VS2005)
问题集合:
001:我要创建一个继承自多个接口的组件类
用ATL"添加简单对象向"导->添加类->ATL->ATL简单对象
用Atl向导生成的组件类默认之继承了一个接口类。假设组建类为CMathFt(Math不允许用作自定类名)那么它默认继承和实现的一个接口为IMathFt.如果此时希望另外添加一个接口,比如IAdvancedMath.那么ATL有没有提供向导呢?答案是目前没有提供。但有时候我们需要这么干。有些资料上说这个问题时候,会告诉你如何更改IDL,添加映射等等。
事实上方法映射仍然可以利用ATL的向导(有向导我们似乎更相信向导),具体方法如下:
1:更改IDL文件
毫无办法有些代码还是得手动输入的
在IDL定义完IMath的下面输入如下代码,它们用来描述一个接口
[
object,
uuid(D81486DB-8431-4daf-9ED4-0FE3FD280E4B),
helpstring("IAdvancedMath 接口"),
pointer_default(unique)
]
interface IAdvancedMath : IUnknown{
};
修改一处idl代码,红色是添加的部分,其余为原有的
library Chapter3ServerLib
{
importlib("stdole2.tlb");
[
uuid(29C78992-77E2-462B-B615-66A79A091765),
helpstring("CMathFt Class")
]
coclass CMathFt
{
[default] interface IMathFt;
interface IAdvancedMath;
};
};
2:修改组件类CMath 红色是添加的部分,其余为原有的
class ATL_NO_VTABLE CMathFt :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMathFt, &CLSID_Math>,
public IMathFt,
public IAdvancedMath
{
public:
CMathFt()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MATHFT)
BEGIN_CATEGORY_MAP(CMathFt)
IMPLEMENTED_CATEGORY(CATID_ATLDevGuide)
END_CATEGORY_MAP()
BEGIN_COM_MAP(CMathFt)
COM_INTERFACE_ENTRY(IMathFt)
COM_INTERFACE_ENTRY(IAdvancedMath)
END_COM_MAP()
。。。
};
经过如上修改后那么你就可以像添加IMath方法那样去添加IAdvancedMath的方法了