VC++实现COM事件接收器

发表于:2007-06-11来源:作者:点击数: 标签:
1、给程序添加ATL支持。 右键-New ATL Object 2、实现IDispEventImpl 接口。 //EventSink.h #import "..\Server\De bug \Server.exe" raw_interface_only,no_namespace,named_guids class CEventSink : public IDispEventImpl0, CEventSink,DIID__IObjEvents

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

//

#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();

}



原文转自:http://www.ltesting.net

...