给CApplication对象添加多接口
我的做法是:
在IDL文件里添加如下
[
object,
uuid(58FAC462-0E70-4B8C-9F6E-9BE5962E15FA),
dual,
nonextensible,
helpstring("IUser 接口"),
pointer_default(unique)
]
interface IUser: IDispatch{
}; coclass Application
{
[default] interface IApplication;
[default, source] dispinterface _IApplicationEvents;
interface IUser;
};
然后在在控件类中继承这个接口,并添加接口映射等。现在在类视图里就出现了IUser这个接口,我直接右键添加方法,比如添加Get_ID方法后,Idl文件为
interface IUser: IDispatch{
[id(1), helpstring("方法get_ID")] HRESULT get_ID([out,retval] ULONG* pVal);};
Application.h里为
STDMETHOD(get_ID)(ULONG* pVal);
Application.cpp里为
STDMETHODIMP CApplication::get_ID(ULONG* pVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: 在此添加实现代码 return S_OK;
}注意这个方法是属于CApplication的,设想如果我这个对象支持5个接口,每个接口有10个方法,那岂不在Application.cpp中添加50个函数。
是我添加接口的方法不对呢?
我的做法是:
在IDL文件里添加如下
[
object,
uuid(58FAC462-0E70-4B8C-9F6E-9BE5962E15FA),
dual,
nonextensible,
helpstring("IUser 接口"),
pointer_default(unique)
]
interface IUser: IDispatch{
}; coclass Application
{
[default] interface IApplication;
[default, source] dispinterface _IApplicationEvents;
interface IUser;
};
然后在在控件类中继承这个接口,并添加接口映射等。现在在类视图里就出现了IUser这个接口,我直接右键添加方法,比如添加Get_ID方法后,Idl文件为
interface IUser: IDispatch{
[id(1), helpstring("方法get_ID")] HRESULT get_ID([out,retval] ULONG* pVal);};
Application.h里为
STDMETHOD(get_ID)(ULONG* pVal);
Application.cpp里为
STDMETHODIMP CApplication::get_ID(ULONG* pVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: 在此添加实现代码 return S_OK;
}注意这个方法是属于CApplication的,设想如果我这个对象支持5个接口,每个接口有10个方法,那岂不在Application.cpp中添加50个函数。
是我添加接口的方法不对呢?
但我一直把接口当做类来看。继承自某个接口,就可以看做派生自哪个类,比如我上面继承了IUser接口。
所以我希望代码是这样的形式:
有User.h 和User.cpp2个文件,我在类视图右键用向导添加接口函数后,函数会添加到这2个文件里面。
而不是application.h/cpp里面(IApplication:public IUser)
这个要求合理吗?该如何实现?
“方法分类应该在接口中”这个是如何体现出来的呢?
在IDL文件里是体现出来了。
但是在接口方法的实现上却体现不出来。
我为不同接口添加的方法都在这个对象的.h和.cpp文件里啊。对象obj
obj:public IA
public IBobj.ha();
b();obj.cpp
obj::a(){} //IA的方法A
obj::b(){} //IB的方法B