给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个函数。
是我添加接口的方法不对呢?

解决方案 »

  1.   

    Application 继承对应的接口,那么就要添加对应的函数
      

  2.   

    "Application 继承对应的接口,那么就要添加对应的函数"这话说得没错。
    但我一直把接口当做类来看。继承自某个接口,就可以看做派生自哪个类,比如我上面继承了IUser接口。
    所以我希望代码是这样的形式:
    有User.h 和User.cpp2个文件,我在类视图右键用向导添加接口函数后,函数会添加到这2个文件里面。
    而不是application.h/cpp里面(IApplication:public IUser)
    这个要求合理吗?该如何实现?
      

  3.   

    IUser中直接自己手动添加对应的接口函数,这样也不麻烦..
      

  4.   

    对不起,还是不明白。
    “方法分类应该在接口中”这个是如何体现出来的呢?
    在IDL文件里是体现出来了。
    但是在接口方法的实现上却体现不出来。
    我为不同接口添加的方法都在这个对象的.h和.cpp文件里啊。对象obj
    obj:public IA
    public IBobj.ha();
    b();obj.cpp
    obj::a(){} //IA的方法A
    obj::b(){} //IB的方法B