我看了一些资料,最主要的是需要实现IOleObject接口,它有21个方法,怎样去一一实现呢?
有没有好的方法呀,谢谢先.

解决方案 »

  1.   

    接口方法看起来很多,但是大部分不需要太关注,不关注的方法一般简单返回E_NOTIMPL即可,必须实现的只有三个方法:DoVerb、SetHostNames、Close。ATL提供了默认的实现接口IOleObjectImpl<>,你可以直接从这个模板类继承,所有接口方法都提供了默认实现,而且提供了OnXXX之类的函数供你提供额外的功能。
      

  2.   

    没时间了.
    class ATL_NO_VTABLE COptIco : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<COptIco, &CLSID_OptIco>,
    public IDispatchImpl<IOptIco, &IID_IOptIco, &LIBID_ICOOLELib>,
    public IOleObjectImpl<COptIco>BEGIN_COM_MAP(COptIco)
    COM_INTERFACE_ENTRY(IOptIco)编译错误:
    IcoOle.cpp
    d:\program files\microsoft visual studio\vc98\atl\include\atlctl.h(2667) : error C2039: 'IDataObject_GetData' : is not a member of 'COptIco'
            e:\ole自动化\icoole\optico.h(10) : see declaration of 'COptIco'
            d:\program files\microsoft visual studio\vc98\atl\include\atlctl.h(2664) : while compiling class-template member function 'long __stdcall ATL::IDataObjectImpl<class COptIco>::GetData(struct tagFORMATETC *,struct tagSTGMEDIUM *)'
      

  3.   

    也就是开发一个ActiveX组件,IOleObject在IOleObjectImpl里都实现了的,不需要另外实现,如果需要改变其中的一些函数,可以重载它.