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