Event sink causing access violation

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • techie

    #1

    Event sink causing access violation

    I have created an event sink in my ATL COM project. The event sink receives
    events from a C# component. There is no problem with receving events but
    when my COM object is released I get an access violation - (MSCORWKS.DLL):
    0xC0000005: Access Violation.

    Here's my event sink class:

    namespace
    {
    static const int EVENT_ID = 111;//any arbitary value

    static const int DISPID_UPDATE_P ROGRESS = 1;//disp id of UpdateProgress. ..

    _ATL_FUNC_INFO OnUpdateProgres sInfo =
    {
    CC_STDCALL, //calling conv...
    VT_EMPTY,//return value...
    1 ,//number of arguments...
    { VT_I4}//argument types...
    };

    }

    class CEventSink : public
    IDispEventSimpl eImpl<EVENT_ID, CEventSink,&DII D_ITransferModu leEvent>
    {
    public:
    CEventSink();
    virtual ~CEventSink();
    CConsumerAccess * m_pParent;
    inline void SetParent(CCons umerAccess* pParent= NULL) { m_pParent =
    pParent; }
    void __stdcall OnUpdateProgres s( long lResult);

    BEGIN_SINK_MAP( CEventSink)

    SINK_ENTRY_INFO (EVENT_ID,DIID_ ITransferModule Event,DISPID_UP DATE_PROGRESS,O n
    UpdateProgress, &OnUpdateProgre ssInfo)
    END_SINK_MAP()

    };


    I attach and detach the event sink in my COM object code in the following
    way:

    void CConsumerAccess ::EnsureEventSi nkAttached()
    {
    if(m_pSinkClass == NULL)
    {
    m_pSinkClass = new CEventSink();
    m_pSinkClass->SetParent(this );

    m_pSinkClass->DispEventAdvis e((IDispatch*)m _pTransferModul e,&DIID_ITransf erM
    oduleEvent);
    }
    }

    void CConsumerAccess ::DetachEventSi nk()
    {
    if(m_pSinkClass )
    {
    m_pSinkClass->DispEventUnadv ise((IDispatch* )m_pTransferMod ule);
    delete m_pSinkClass ;
    m_pSinkClass = NULL;
    }
    }


    I don't know what could be causing this problem. Its definitely related to
    the event sink because if I don't use it I don't get an access violation.

    I would really appreciate some help on this.



Working...