/******************************************************************************
 *                                                                         
 *               Nimbus auto-generated file
 *               !!! WARNING !!! -- DO NOT DIRECTLY EDIT THE CONTENTS OF THIS FILE.
 *				 Changes will be OVERWRITTEN by NIMBUS.
 *
 *****************************************************************************/

#ifndef __FORWARDINGSHIMS_H__
#define __FORWARDINGSHIMS_H__

class Agilent34959A;


typedef CPersonality<Agilent34959A, CVisaComIOProvider> DriverBase;

template <typename T>
const CComparePolicyManager<T>* CComparePolicyManager<T>::GetDefaultPolicyManager()
{
	static const CComparePolicyManager<T> _comparePolicyManager(
		new CSimpleComparePolicy<T>(14),
		NULL);

	return &_comparePolicyManager;
}

HRESULT IAgilent34959A_get_Digital(Agilent34959A* pT, IAgilent34959ADigital** val);
HRESULT IAgilent34959A_get_Route(Agilent34959A* pT, IAgilent34959ARoute** val);
HRESULT IAgilent34959ARoute_Close(Agilent34959A* pT, BSTR ChannelList);
HRESULT IAgilent34959ARoute_Open(Agilent34959A* pT, BSTR ChannelList);
HRESULT IAgilent34959ARoute_OpenAll(Agilent34959A* pT, long Slot);
HRESULT IAgilent34959ARoute_get_IsClosed(Agilent34959A* pT, BSTR Channel, VARIANT_BOOL* val);
HRESULT IAgilent34959ADigital_Configure(Agilent34959A* pT, BSTR ChannelList, Agilent34959AWidthEnum Width, Agilent34959ADirectionEnum Direction);
HRESULT IAgilent34959ADigital_QueryLastBit(Agilent34959A* pT, BSTR ChannelList, long BitNumber, VARIANT_BOOL* val);
HRESULT IAgilent34959ADigital_QueryLastByte(Agilent34959A* pT, BSTR ChannelList, BYTE* val);
HRESULT IAgilent34959ADigital_QueryLastWord(Agilent34959A* pT, BSTR ChannelList, short* val);
HRESULT IAgilent34959ADigital_ReadBit(Agilent34959A* pT, BSTR Channel, long BitNumber, VARIANT_BOOL* val);
HRESULT IAgilent34959ADigital_ReadByte(Agilent34959A* pT, BSTR ChannelList, BYTE* val);
HRESULT IAgilent34959ADigital_ReadWord(Agilent34959A* pT, BSTR ChannelList, short* val);
HRESULT IAgilent34959ADigital_WriteBit(Agilent34959A* pT, BSTR ChannelList, long BitNumber, VARIANT_BOOL Data);
HRESULT IAgilent34959ADigital_WriteByte(Agilent34959A* pT, BSTR ChannelList, BYTE Data);
HRESULT IAgilent34959ADigital_WriteWord(Agilent34959A* pT, BSTR ChannelList, short Data);
HRESULT IAgilent34959ADigital_get_Direction(Agilent34959A* pT, BSTR ChannelList, Agilent34959ADirectionEnum* val);
HRESULT IAgilent34959ADigital_put_Direction(Agilent34959A* pT, BSTR ChannelList, Agilent34959ADirectionEnum val);
HRESULT IAgilent34959ADigital_get_Width(Agilent34959A* pT, BSTR ChannelList, Agilent34959AWidthEnum* val);
HRESULT IAgilent34959ADigital_put_Width(Agilent34959A* pT, BSTR ChannelList, Agilent34959AWidthEnum val);


///////////////////////////////////////////////////////////////////////////////
//
//	IAgilent34959A
//

template <typename Deriving> struct ATL_NO_VTABLE __IAgilent34959A : public IAgilent34959A
{
	STDMETHODIMP get_Digital(IAgilent34959ADigital** val)
	{
		return IAgilent34959A_get_Digital(static_cast<Deriving*>(this), val);
	}
	STDMETHODIMP get_Route(IAgilent34959ARoute** val)
	{
		return IAgilent34959A_get_Route(static_cast<Deriving*>(this), val);
	}
};

typedef __IAgilent34959A<Agilent34959A> _IAgilent34959A;


///////////////////////////////////////////////////////////////////////////////
//
//	IAgilent34959ARoute
//

template <typename Deriving> struct ATL_NO_VTABLE __IAgilent34959ARoute : public IAgilent34959ARoute
{
	STDMETHODIMP Close(BSTR ChannelList)
	{
		return IAgilent34959ARoute_Close(static_cast<Deriving*>(this), ChannelList);
	}
	STDMETHODIMP Open(BSTR ChannelList)
	{
		return IAgilent34959ARoute_Open(static_cast<Deriving*>(this), ChannelList);
	}
	STDMETHODIMP OpenAll(long Slot)
	{
		return IAgilent34959ARoute_OpenAll(static_cast<Deriving*>(this), Slot);
	}
	STDMETHODIMP get_IsClosed(BSTR Channel, VARIANT_BOOL* val)
	{
		return IAgilent34959ARoute_get_IsClosed(static_cast<Deriving*>(this), Channel, val);
	}
};

typedef __IAgilent34959ARoute<Agilent34959A> _IAgilent34959ARoute;


///////////////////////////////////////////////////////////////////////////////
//
//	IAgilent34959ADigital
//

template <typename Deriving> struct ATL_NO_VTABLE __IAgilent34959ADigital : public IAgilent34959ADigital
{
	STDMETHODIMP Configure(BSTR ChannelList, Agilent34959AWidthEnum Width, Agilent34959ADirectionEnum Direction)
	{
		return IAgilent34959ADigital_Configure(static_cast<Deriving*>(this), ChannelList, Width, Direction);
	}
	STDMETHODIMP QueryLastBit(BSTR ChannelList, long BitNumber, VARIANT_BOOL* val)
	{
		return IAgilent34959ADigital_QueryLastBit(static_cast<Deriving*>(this), ChannelList, BitNumber, val);
	}
	STDMETHODIMP QueryLastByte(BSTR ChannelList, BYTE* val)
	{
		return IAgilent34959ADigital_QueryLastByte(static_cast<Deriving*>(this), ChannelList, val);
	}
	STDMETHODIMP QueryLastWord(BSTR ChannelList, short* val)
	{
		return IAgilent34959ADigital_QueryLastWord(static_cast<Deriving*>(this), ChannelList, val);
	}
	STDMETHODIMP ReadBit(BSTR Channel, long BitNumber, VARIANT_BOOL* val)
	{
		return IAgilent34959ADigital_ReadBit(static_cast<Deriving*>(this), Channel, BitNumber, val);
	}
	STDMETHODIMP ReadByte(BSTR ChannelList, BYTE* val)
	{
		return IAgilent34959ADigital_ReadByte(static_cast<Deriving*>(this), ChannelList, val);
	}
	STDMETHODIMP ReadWord(BSTR ChannelList, short* val)
	{
		return IAgilent34959ADigital_ReadWord(static_cast<Deriving*>(this), ChannelList, val);
	}
	STDMETHODIMP WriteBit(BSTR ChannelList, long BitNumber, VARIANT_BOOL Data)
	{
		return IAgilent34959ADigital_WriteBit(static_cast<Deriving*>(this), ChannelList, BitNumber, Data);
	}
	STDMETHODIMP WriteByte(BSTR ChannelList, BYTE Data)
	{
		return IAgilent34959ADigital_WriteByte(static_cast<Deriving*>(this), ChannelList, Data);
	}
	STDMETHODIMP WriteWord(BSTR ChannelList, short Data)
	{
		return IAgilent34959ADigital_WriteWord(static_cast<Deriving*>(this), ChannelList, Data);
	}
	STDMETHODIMP get_Direction(BSTR ChannelList, Agilent34959ADirectionEnum* val)
	{
		return IAgilent34959ADigital_get_Direction(static_cast<Deriving*>(this), ChannelList, val);
	}
	STDMETHODIMP put_Direction(BSTR ChannelList, Agilent34959ADirectionEnum val)
	{
		return IAgilent34959ADigital_put_Direction(static_cast<Deriving*>(this), ChannelList, val);
	}
	STDMETHODIMP get_Width(BSTR ChannelList, Agilent34959AWidthEnum* val)
	{
		return IAgilent34959ADigital_get_Width(static_cast<Deriving*>(this), ChannelList, val);
	}
	STDMETHODIMP put_Width(BSTR ChannelList, Agilent34959AWidthEnum val)
	{
		return IAgilent34959ADigital_put_Width(static_cast<Deriving*>(this), ChannelList, val);
	}
};

typedef __IAgilent34959ADigital<Agilent34959A> _IAgilent34959ADigital;




#endif // __FORWARDINGSHIMS_H__