// Simple.h : Declaration of the CSimple #include "resource.h" // main symbols ///////////////////////////////////////////////////////////////////////////// // CATLSmpl class CSimple : public CComDualImpl, public ISupportErrorInfo, public CComObjectRoot, public CComCoClass { public: CSimple(); BEGIN_COM_MAP(CSimple) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISimple) COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p) END_COM_MAP() //DECLARE_NOT_AGGREGATABLE(CSimple) // Remove the comment from the line above if you don't want your object to // support aggregation. The default is to support it DECLARE_REGISTRY(CSimple, _T("IISSample.C++ATLSimple.1"), _T("IISSample.C++ATLSimple"), IDS_SIMPLE_DESC, THREADFLAGS_BOTH) // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid); // ISimple public: // for free-threaded marshalling DECLARE_GET_CONTROLLING_UNKNOWN() HRESULT FinalCountruct() { return CoCreateFreeThreadedMarshaler( GetControllingUnknown(), &m_pUnkMarshaler.p ); } void FinalRelease() { m_pUnkMarshaler.Release(); } STDMETHOD(get_myProperty)(BSTR* pbstrOutValue); STDMETHOD(put_myProperty)(BSTR bstrInValue); STDMETHOD(myMethod) (BSTR bstrIn, BSTR* pbstrOut); private: CComBSTR m_bstrMyProperty; CComPtr m_pUnkMarshaler; };