为什么这个STDMETHOD(Load) ( LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog );函数执行不到呢?该如何解决
为什么这个STDMETHOD(Load) ( LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog );函数执行不到呢?
我的类这样定义的
class ATL_NO_VTABLE CSOActiveX :
public CComObjectRootEx <CComSingleThreadModel> ,
public IDispatchImpl <ISOActiveX, &IID_ISOActiveX, &LIBID_RedOfficeLib, /*wMajor =*/ 1, /*wMinor =*/ 0> ,
public IPersistStreamInitImpl <CSOActiveX> ,
public IOleControlImpl <CSOActiveX> ,
public IOleObjectImpl <CSOActiveX> ,
public IOleInPlaceActiveObjectImpl <CSOActiveX> ,
public IViewObjectExImpl <CSOActiveX> ,
public IOleInPlaceObjectWindowlessImpl <CSOActiveX> ,
public ISupportErrorInfo,
public IConnectionPointContainerImpl <CSOActiveX> ,
public CProxy_ISOActiveXEvents <CSOActiveX> ,
public IPersistStorageImpl <CSOActiveX> ,
public ISpecifyPropertyPagesImpl <CSOActiveX> ,
public IQuickActivateImpl <CSOActiveX> ,
public IDataObjectImpl <CSOActiveX> ,
public IPersistPropertyBagImpl < CSOActiveX > ,//load
public IProvideClassInfo2Impl <&CLSID_SOActiveX, &__uuidof(_ISOActiveXEvents), &LIBID_RedOfficeLib> ,
public CComCoClass <CSOActiveX, &CLSID_SOActiveX> ,
public IObjectSafetyImpl < CSOActiveX, INTERFACESAFE_FOR_UNTRUSTED_DATA > ,//add
public CComControl <CSOActiveX>
{
void sethWnd( void );
HRESULT CallDispatch1PString( OLECHAR* sUrl, OLECHAR* sArgName, OLECHAR* sArgVal );
HRESULT CallDispatch1Int( OLECHAR* sUrl, OLECHAR* sArgName, int sArgVal );
HRESULT CallDispatch1PBool( OLECHAR* sUrl, OLECHAR* sArgName, BOOL sArgVal );
public:
CSOActiveX();
HRESULT CreateFrameOldWay( HWND hwnd, int width, int height );
HRESULT GetUnoStruct( OLECHAR* sStructName, CComPtr <IDispatch> & pdispResult );
HRESULT LoadURLToFrame();
HRESULT HideAllBars();
HRESULT setStartModel( int iModel );
HRESULT GetUrlStruct( OLECHAR* sUrl, CComPtr <IDispatch> & pdispUrl );
STDMETHOD(SetClientSite)( IOleClientSite* aClientSite );
STDMETHOD(Load) ( LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog );
DECLARE_OLEMISC_STATUS(OLEMISC_RECOMPOSEONRESIZE |
OLEMISC_CANTLINKINSIDE |
OLEMISC_INSIDEOUT |
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST
)
DECLARE_REGISTRY_RESOURCEID(IDR_SOACTIVEX)
BEGIN_COM_MAP(CSOActiveX)
COM_INTERFACE_ENTRY(ISOActiveX)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
COM_INTERFACE_ENTRY(IViewObject)
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceObject)
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY(IOleControl)
COM_INTERFACE_ENTRY(IOleObject)
COM_INTERFACE_ENTRY(IPersistStreamInit)
COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
我的类这样定义的
class ATL_NO_VTABLE CSOActiveX :
public CComObjectRootEx <CComSingleThreadModel> ,
public IDispatchImpl <ISOActiveX, &IID_ISOActiveX, &LIBID_RedOfficeLib, /*wMajor =*/ 1, /*wMinor =*/ 0> ,
public IPersistStreamInitImpl <CSOActiveX> ,
public IOleControlImpl <CSOActiveX> ,
public IOleObjectImpl <CSOActiveX> ,
public IOleInPlaceActiveObjectImpl <CSOActiveX> ,
public IViewObjectExImpl <CSOActiveX> ,
public IOleInPlaceObjectWindowlessImpl <CSOActiveX> ,
public ISupportErrorInfo,
public IConnectionPointContainerImpl <CSOActiveX> ,
public CProxy_ISOActiveXEvents <CSOActiveX> ,
public IPersistStorageImpl <CSOActiveX> ,
public ISpecifyPropertyPagesImpl <CSOActiveX> ,
public IQuickActivateImpl <CSOActiveX> ,
public IDataObjectImpl <CSOActiveX> ,
public IPersistPropertyBagImpl < CSOActiveX > ,//load
public IProvideClassInfo2Impl <&CLSID_SOActiveX, &__uuidof(_ISOActiveXEvents), &LIBID_RedOfficeLib> ,
public CComCoClass <CSOActiveX, &CLSID_SOActiveX> ,
public IObjectSafetyImpl < CSOActiveX, INTERFACESAFE_FOR_UNTRUSTED_DATA > ,//add
public CComControl <CSOActiveX>
{
void sethWnd( void );
HRESULT CallDispatch1PString( OLECHAR* sUrl, OLECHAR* sArgName, OLECHAR* sArgVal );
HRESULT CallDispatch1Int( OLECHAR* sUrl, OLECHAR* sArgName, int sArgVal );
HRESULT CallDispatch1PBool( OLECHAR* sUrl, OLECHAR* sArgName, BOOL sArgVal );
public:
CSOActiveX();
HRESULT CreateFrameOldWay( HWND hwnd, int width, int height );
HRESULT GetUnoStruct( OLECHAR* sStructName, CComPtr <IDispatch> & pdispResult );
HRESULT LoadURLToFrame();
HRESULT HideAllBars();
HRESULT setStartModel( int iModel );
HRESULT GetUrlStruct( OLECHAR* sUrl, CComPtr <IDispatch> & pdispUrl );
STDMETHOD(SetClientSite)( IOleClientSite* aClientSite );
STDMETHOD(Load) ( LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog );
DECLARE_OLEMISC_STATUS(OLEMISC_RECOMPOSEONRESIZE |
OLEMISC_CANTLINKINSIDE |
OLEMISC_INSIDEOUT |
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST
)
DECLARE_REGISTRY_RESOURCEID(IDR_SOACTIVEX)
BEGIN_COM_MAP(CSOActiveX)
COM_INTERFACE_ENTRY(ISOActiveX)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
COM_INTERFACE_ENTRY(IViewObject)
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceObject)
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY(IOleControl)
COM_INTERFACE_ENTRY(IOleObject)
COM_INTERFACE_ENTRY(IPersistStreamInit)
COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
COM_INTERFACE_ENTRY(ISupportErrorInfo)