text: #pragma once
  
  class m_IDirectInputW : public IDirectInputW, public AddressLookupTableDinputObject
  {
  private:
  	m_IDirectInputX *ProxyInterface;
  	IDirectInputW *RealInterface;
  	REFIID WrapperID = IID_IDirectInputW;
  	const DWORD DirectXVersion = 1;
  
  public:
  	m_IDirectInputW(IDirectInputW *aOriginal, m_IDirectInputX *Interface) : RealInterface(aOriginal), ProxyInterface(Interface)
  	{
  		ProxyAddressLookupTable.SaveAddress(this, RealInterface);
  	}
  	~m_IDirectInputW()
  	{
  		ProxyAddressLookupTable.DeleteAddress(this);
  	}
  
  	/*** IUnknown methods ***/
  	STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR * ppvObj);
  	STDMETHOD_(ULONG, AddRef)(THIS);
  	STDMETHOD_(ULONG, Release)(THIS);
  
  	/*** IDirectInput methods ***/
  	STDMETHOD(CreateDevice)(THIS_ REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN);
  	STDMETHOD(EnumDevices)(THIS_ DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD);
  	STDMETHOD(GetDeviceStatus)(THIS_ REFGUID);
  	STDMETHOD(RunControlPanel)(THIS_ HWND, DWORD);
  	STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD);
  };
  