一个基本的Object创建的ActiveX控件,如何得到GetClientSite( &pClientSite );
因为GetClientSite( &pClientSite );是IOleObject::GetClientSite
必须继承IOleObject,能不能够不继承IOleObject获得同样的内容呢,请赐教!

解决方案 »

  1.   

    为什么不继承 IOleObject 呢?
      

  2.   

    /////////////////////////////////////////////////////////////////////////////
    // COSRCtrlIntf
    class ATL_NO_VTABLE COSRCtrlIntf : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<COSRCtrlIntf, &CLSID_OSRCtrlIntf>,
    public ISupportErrorInfo,
    public IConnectionPointContainerImpl<COSRCtrlIntf>,
    public IDispatchImpl<IOSRCtrlIntf, &IID_IOSRCtrlIntf, &LIBID_OSRACTIVEXLib>,
    public IOleObject 
    {
    但是继承的话出现2个错误,说是c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1827) : error C2259: 'CComObject<class COSRCtrlIntf>' 抽象的实现错误
      

  3.   

    template <class T1>
    class CComCreator
    {
    public:
    static HRESULT WINAPI CreateInstance(void* pv, REFIID riid, LPVOID* ppv)
    {
    ATLASSERT(*ppv == NULL);
    HRESULT hRes = E_OUTOFMEMORY;
    T1* p = NULL;
    ATLTRY(p = new T1(pv))/////////这里出错
      

  4.   

    具体的错误为:
    c:\program   files\microsoft   visual   studio\vc98\atl\include\atlcom.h(1827)   :   error   C2259:   'CComObject<class   COSRCtrlIntf>'   :   cannot   instantiate   abstract   class   due   to   following   members:   
      c:\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   COSRCtrlIntf>   >::CreateInstance(void   *,const   struct   _GUID   &,void     
      **   )'