Errors and the SCPIStringParser Object

This C++ program uses the SCPIStringParser.Parse command to detect the failed HRESULT and interrogate the errorInfo object for more details.


// scpierrors.cpp : Defines the entry point for the console application.



#include <iostream>

#include "afx.h"

#include "atlbase.h"

#import "C:/program files/common files/Keysight/pna/835x.tlb" raw_interfaces_only, no_namespace, named_guids

using namespace std;

HRESULT SendScpiCommand( IScpiStringParser* parser, CComBSTR& cmd, CComBSTR& response)


CComBSTR bstr;

HRESULT hr = parser->Parse(CComBSTR(cmd), &response);

if (FAILED(hr))


// see if this interface supports ErrInfo

CComPtr<ISupportErrorInfo> spSupportsErrInfo;

if (SUCCEEDED(parser->QueryInterface(&spSupportsErrInfo)))


// it does, so let's get the errorinfo object

CComPtr<IErrorInfo> spErrorInfo;

if (SUCCEEDED(GetErrorInfo(0, &spErrorInfo)))


CComBSTR errStr;


std::cout << "ERROR: " << CString(errStr) << std::endl;




return hr;


int main()




CComBSTR response;

CComPtr<IApplication> spPNA;

CComPtr<IScpiStringParser> spSCPI;

if (SUCCEEDED(spPNA.CoCreateInstance(CLSID_Application)))



SendScpiCommand(spSCPI, CComBSTR("SYSTEM:PRESET"), response);

SendScpiCommand(spSCPI, CComBSTR("CALC:PAR:CAT?"), response);

std::cout << CString(response) << std::endl;

SendScpiCommand(spSCPI, CComBSTR("THIS:IS:A:SYNTAX:ERROR"), response);




return 0;