ATL受信イベント非ActiveXコントロール
2258 ワード
IDispEventImpl
またはIDispEventSimpleImplを使用するIDispEventSimpleImplでは、IDispEventImpl
のデータ構造を準備し、SINK_ENTRY_INFOはIDispEventImpl, lib, 。 SINK_ENTRY_EX
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------#define LIBRARY_MAJOR 1
#define LIBRARY_MINOR 0
class CDriver :
public CComObjectRoot,
public IDispEventImpl<0, CDriver, &__uuidof(_IMyTestEvents), &LIBID_ATL3Lib, LIBRARY_MAJOR, LIBRARY_MINOR>
// public IDispEventSimpleImpl<0, CDriver, &__uuidof(_IMyTestEvents)>
{
public:
static _ATL_FUNC_INFO OnOKInfo;
CDriver() {}
BEGIN_COM_MAP(CDriver)
END_COM_MAP()
BEGIN_SINK_MAP(CDriver)
SINK_ENTRY_EX(0, __uuidof(_IMyTestEvents), 1, On_OK)
// SINK_ENTRY_INFO(0, __uuidof(_IMyTestEvents), 1, On_OK,&OnOKInfo)
END_SINK_MAP()
HRESULT __stdcall On_OK()
{
MessageBox(NULL,_T("On_OK"),_T("Sink"),MB_OK);
return 0L;
}
};
_ATL_FUNC_INFO CDriver::OnOKInfo = {CC_STDCALL, VT_EMPTY, 0, { VT_BSTR }};
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
::CoInitialize( NULL ); // COM ,
CComQIPtr spFun;
HRESULT hr = spFun.CoCreateInstance( __uuidof(MyTest));
ATLASSERT( SUCCEEDED( hr ) );
CComObject* ptrMathEvents;
CComObject::CreateInstance( &ptrMathEvents );
ptrMathEvents->DispEventAdvise(spFun,&__uuidof(_IMyTestEvents));
// AtlAdvise(spFun, (IUnknown*)ptrMathEvents, DIID__IMyTestEvents, &m_dwEventCookie);
spFun->Foo();
// spFun->Release(); // !!!
spFun.Release(); //
::CoUninitialize();
転載先:https://www.cnblogs.com/fanzi2009/archive/2010/05/07/1729517.html