9 analyzer events callback interface, Analyzer events callback interface – Teledyne LeCroy Automation API for Bluetooth Analyzers User Manual
Page 83

77
Automation API for CATC Bluetooth Analyzers
CATC
Ver. 1.40
2.9 Analyzer events callback interface
In order to retrieve the events from BTAnalyzer application you must implement
_IAnalyzerEvents
interface.
Since this interface is default source interface for
BTAnalyzer
object there is very
simple implementation from such languages like Visual Basic, VBA, VBScript,
WSH etc.
C++ implementation used in the examples below utilizes implements a sink object
by deriving from
IDispEventImpl
but not specifying the type library as a template argu-
ment. Instead the type library and default source interface for the object are deter-
mined using
AtlGetObjectSourceInterface()
. A
SINK_ENTRY()
macro is used for each event
from each source interface which is to be handled:
class CAnalyzerSink : public IDispEventImpl
{
BEGIN_SINK_MAP(CAnalyzerSink)
//Make sure the Event Handlers have __stdcall calling convention
SINK_ENTRY(IDC_SRCOBJ, 1, OnTraceCreated)
SINK_ENTRY(IDC_SRCOBJ, 2, OnStatusReport)
END_SINK_MAP()
. . .
}
Then, after you established the connection with server you need to advise your implementation of
the event interface:
hr = CoCreateInstance( CLSID_BTAnalyzer, NULL,
CLSCTX_SERVER, IID_IBTAnalyzer, (LPVOID *)&m_poBTAnalyzer );
m_poAnalyzerSink = new CAnalyzerSink();
// Make sure the COM object corresponding to pUnk implements
IProvideClassInfo2 or
// IPersist*. Call this method to extract info about source type library if
you
// specified only 2 parameters to IDispEventImpl
hr = AtlGetObjectSourceInterface(m_poBTAnalyzer,&m_poAnalyzerSink->m_libid,
&m_poAnalyzerSink->m_iid, &m_poAnalyzerSink->m_wMajorVerNum,
&m_poAnalyzerSink->m_wMinorVerNum);
if ( FAILED(hr) )
return 1;
// connect the sink and source, m_poBTAnalyzer is the source COM object
hr = m_poAnalyzerSink->DispEventAdvise(m_poBTAnalyzer,
&m_poAnalyzerSink->m_iid);
if ( FAILED(hr) )
return 1;