我爱电脑技术论坛's Archiver

麦迪 发表于 2008-7-29 20:15

VC++实现COM事件接收器

1、给程序添加ATL支持。
    右键->New ATL Object

    2、实现IDispEventImpl 接口。

    //EventSink.h

    #import "..\Server\Debug\Server.exe" raw_interface_only,no_namespace,named_guids

    class  CEventSink :

    public IDispEventImpl<0, CEventSink,&DIID__IObjEvents,&LIBID_SERVERLib, 1, 0>

    {

    public:

    CEventSink()

    {

    }

    public:

    BEGIN_SINK_MAP(CEventSink)

    SINK_ENTRY_EX(0, DIID__IObjEvents, 1, cbFunc01)

    END_SINK_MAP()

    STDMETHOD(cbFunc01)();

    };



    //EventSink.cpp

    #include "stdafx.h"

    #include "EventSink.h"

    STDMETHODIMP CEventSink::cbFunc01()

    {

    AfxMessageBox("called by Event from dll Server !");

    return S_OK;

    }



    3、连接对象

    // ClientDlg.cpp : implementation file

    //

麦迪 发表于 2008-7-29 20:15

#include "EventSink.h"



    void CClientDlg::OnButton1()

    {

    // TODO: Add your control notification handler code here

    ::CoInitialize(NULL);

    {

    IObjPtr pObj;

    CEventSink *pEventSink= new CEventSink;

    pObj.CreateInstance(__uuidof(Obj));

    pEventSink->DispEventAdvise(pObj);

    pObj->Func01();

    pEventSink->DispEventUnadvise(pObj);

    delete pEventSink;

    }

    ::CoUninitialize();

    }

页: [1]
 

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.