beautypg.com

9 analyzer events callback interface, 1 _ianalyzerevents dispinterface, 1 _ianalyzerevents::ontracecreated – Teledyne LeCroy USB Analyzer Automation Manual User Manual

Page 117: Analyzer events callback interface, Ianalyzerevents dispinterface, Ianalyzerevents::ontracecreated, Ianalyzerevents, Inte

background image

Teledyne LeCroy Automation API Reference Manual for USBTracer, USB Advisor, and Voyager USB Protocol
Suite

117

9 Analyzer Events Callback Interface

9.1

_

IAnalyzerEvents dispinterface

In order to retrieve the events from the USB Protocol Suite application, you must implement the
_IAnalyzerEvents interface.

Since this interface is the default source interface for the

UsbAnalyzer

object, there is a very simple

implementation from such languages as Visual Basic, VBA, VBScript, WSH, etc.

C++ implementation used in the examples below implements a sink object by deriving it from
IDispEventImpl

but not specifying the type library as a template argument. Instead, the type library and

default source interface for the object are determined 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 establish the connection with the server, you need to advise your implementation of the
event interface:

hr = CoCreateInstance( CLSID_UsbAdvisor, NULL,

CLSCTX_SERVER, IID_IUsbAnalyzer, (LPVOID *)&m_poUsbAnalyzer );

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_poUsbAnalyzer, &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_poUsbAnalyzer is the source COM object

hr = m_poAnalyzerSink->DispEventAdvise(m_poUsbAnalyzer, &m_poAnalyzerSink->m_iid);

if ( FAILED(hr) )

return 1;










9.1.1 _IAnalyzerEvents::OnTraceCreated