Safearray* packet_safearray = packet.parray – Teledyne LeCroy Automation API for Teledyne LeCroy PETracer_PETrainer User Manual
Page 47

Teledyne LeCroy
Automation API for PETracer/PETrainer
42
C++: 
 
 IPETrace* pe_trace; 
 LONG packet_number; 
 
 . . . 
 
 VARIANT packet; 
 VariantInit( &packet ); 
 long number_of_bytes; 
 try 
 { 
 number_of_bytes = pe_trace->GetPacket( packet_number, &packet ); 
 } 
 catch ( _com_error& er) 
 { 
 if (er.Description().length() > 0) 
 ::MessageBox( NULL, er.Description(), _T("PETracer client"), MB_OK ); 
 else 
 ::MessageBox( NULL, er.ErrorMessage(),_T("PETracer client"), MB_OK ); 
 return 1; 
 } 
 
 if ( packet.vt == ( VT_ARRAY | VT_VARIANT) ) 
 { 
 SAFEARRAY* packet_safearray = packet.parray; 
 
 TCHAR packet_message[256]; 
 TCHAR elem[64]; 
_stprintf( packet_message, _T("packet #%ld: "), packet_number );
 
 for ( long i=0; i<(long)packet_safearray->rgsabound[0].cElements; i++) 
 { 
 VARIANT var; 
 HRESULT hr = SafeArrayGetElement(packet_safearray, &i, &var); 
 if (FAILED(hr)) 
 { 
 ::MessageBox( NULL, _T("Error accessing array"), _T("PETracer client"), MB_OK ); 
 return 1; 
 } 
 if ( var.vt != ( VT_UI1) ) 
 { 
 ::MessageBox( NULL, _T("Array of bytes expected"), _T("PETracer client"), MB_OK ); 
 return 1; 
 } 
 
 _stprintf( elem, _T("%02X "), V_UI1(&var) ); 
 _tcscat( packet_message, elem ); 
 } 
 _stprintf( elem, _T("%d bytes"), number_of_bytes ); 
 _tcscat( packet_message, elem ); 
 
 ::MessageBox( NULL, packet_message, _T("Raw packet bits"), MB_OK ); 
 } 
 else 
 { 
 ::MessageBox( NULL, _T("Invalid argument"), _T("PETracer client"), MB_OK ); 
 } 
 
