300 lines
7.3 KiB
C++
300 lines
7.3 KiB
C++
//*********************************************************************
|
|
//* Microsoft Windows **
|
|
//* Copyright(c) Microsoft Corp., 1999 **
|
|
//*********************************************************************
|
|
//
|
|
// PASSPORT.CPP - Header for the implementation of CPassport
|
|
//
|
|
// HISTORY:
|
|
//
|
|
// 1/27/99 a-jaswed Created.
|
|
//
|
|
|
|
#include "passport.h"
|
|
#include "appdefs.h"
|
|
#include "dispids.h"
|
|
|
|
DISPATCHLIST PassportExternalInterface[] =
|
|
{
|
|
{L"get_PassportID", DISPID_PASSPORT_GET_ID },
|
|
{L"set_PassportID", DISPID_PASSPORT_SET_ID },
|
|
{L"get_PassportPassword", DISPID_PASSPORT_GET_PASSWORD },
|
|
{L"set_PassportPassword", DISPID_PASSPORT_SET_PASSWORD },
|
|
{L"get_PassportLocale", DISPID_PASSPORT_GET_LOCALE },
|
|
{L"set_PassportLocale", DISPID_PASSPORT_SET_LOCALE }
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CPassport::CPassport
|
|
CPassport::CPassport()
|
|
{
|
|
|
|
// Init member vars
|
|
m_cRef = 0;
|
|
|
|
m_bstrID = SysAllocString(L"\0");
|
|
m_bstrPassword = SysAllocString(L"\0");
|
|
m_bstrLocale = SysAllocString(L"\0");
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CPassport::~CPassport
|
|
CPassport::~CPassport()
|
|
{
|
|
assert(m_cRef == 0);
|
|
}
|
|
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
//// GET / SET :: PassportID
|
|
////
|
|
HRESULT CPassport::set_PassportID(BSTR bstrVal)
|
|
{
|
|
if (NULL != m_bstrID)
|
|
{
|
|
SysFreeString(m_bstrID);
|
|
}
|
|
|
|
m_bstrID = SysAllocString(bstrVal);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CPassport::get_PassportID(BSTR* pbstrVal)
|
|
{
|
|
*pbstrVal = SysAllocString(m_bstrID);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
//// GET / SET :: PassportPassword
|
|
////
|
|
HRESULT CPassport::set_PassportPassword(BSTR bstrVal)
|
|
{
|
|
if (NULL != m_bstrPassword)
|
|
{
|
|
SysFreeString(m_bstrPassword);
|
|
}
|
|
|
|
m_bstrPassword = SysAllocString(bstrVal);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CPassport::get_PassportPassword(BSTR* pbstrVal)
|
|
{
|
|
*pbstrVal = SysAllocString(m_bstrPassword);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
//// GET / SET :: PassportLocale
|
|
////
|
|
HRESULT CPassport::set_PassportLocale(BSTR bstrVal)
|
|
{
|
|
if (NULL != m_bstrLocale)
|
|
{
|
|
SysFreeString(m_bstrLocale);
|
|
}
|
|
|
|
m_bstrLocale = SysAllocString(bstrVal);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CPassport::get_PassportLocale(BSTR* pbstrVal)
|
|
{
|
|
*pbstrVal = SysAllocString(m_bstrLocale);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////
|
|
/////// IUnknown implementation
|
|
///////
|
|
///////
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CPassport::QueryInterface
|
|
STDMETHODIMP CPassport::QueryInterface(REFIID riid, LPVOID* ppvObj)
|
|
{
|
|
// must set out pointer parameters to NULL
|
|
*ppvObj = NULL;
|
|
|
|
if ( riid == IID_IUnknown)
|
|
{
|
|
AddRef();
|
|
*ppvObj = (IUnknown*)this;
|
|
return ResultFromScode(S_OK);
|
|
}
|
|
|
|
if (riid == IID_IDispatch)
|
|
{
|
|
AddRef();
|
|
*ppvObj = (IDispatch*)this;
|
|
return ResultFromScode(S_OK);
|
|
}
|
|
|
|
// Not a supported interface
|
|
return ResultFromScode(E_NOINTERFACE);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CPassport::AddRef
|
|
STDMETHODIMP_(ULONG) CPassport::AddRef()
|
|
{
|
|
return ++m_cRef;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CPassport::Release
|
|
STDMETHODIMP_(ULONG) CPassport::Release()
|
|
{
|
|
return --m_cRef;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////
|
|
/////// IDispatch implementation
|
|
///////
|
|
///////
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CPassport::GetTypeInfo
|
|
STDMETHODIMP CPassport::GetTypeInfo(UINT, LCID, ITypeInfo**)
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CPassport::GetTypeInfoCount
|
|
STDMETHODIMP CPassport::GetTypeInfoCount(UINT* pcInfo)
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CPassport::GetIDsOfNames
|
|
STDMETHODIMP CPassport::GetIDsOfNames(REFIID riid,
|
|
OLECHAR** rgszNames,
|
|
UINT cNames,
|
|
LCID lcid,
|
|
DISPID* rgDispId)
|
|
{
|
|
|
|
HRESULT hr = DISP_E_UNKNOWNNAME;
|
|
rgDispId[0] = DISPID_UNKNOWN;
|
|
|
|
for (int iX = 0; iX < sizeof(PassportExternalInterface)/sizeof(DISPATCHLIST); iX ++)
|
|
{
|
|
if(lstrcmp(PassportExternalInterface[iX].szName, rgszNames[0]) == 0)
|
|
{
|
|
rgDispId[0] = PassportExternalInterface[iX].dwDispID;
|
|
hr = NOERROR;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Set the disid's for the parameters
|
|
if (cNames > 1)
|
|
{
|
|
// Set a DISPID for function parameters
|
|
for (UINT i = 1; i < cNames ; i++)
|
|
rgDispId[i] = DISPID_UNKNOWN;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CPassport::Invoke
|
|
HRESULT CPassport::Invoke
|
|
(
|
|
DISPID dispidMember,
|
|
REFIID riid,
|
|
LCID lcid,
|
|
WORD wFlags,
|
|
DISPPARAMS* pdispparams,
|
|
VARIANT* pvarResult,
|
|
EXCEPINFO* pexcepinfo,
|
|
UINT* puArgErr
|
|
)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
switch(dispidMember)
|
|
{
|
|
case DISPID_PASSPORT_GET_ID:
|
|
{
|
|
if(pvarResult)
|
|
{
|
|
VariantInit(pvarResult);
|
|
V_VT(pvarResult) = VT_BSTR;
|
|
|
|
get_PassportID(&(pvarResult->bstrVal));
|
|
}
|
|
break;
|
|
}
|
|
|
|
case DISPID_PASSPORT_SET_ID:
|
|
{
|
|
if(pdispparams && &pdispparams[0].rgvarg[0])
|
|
set_PassportID(pdispparams[0].rgvarg[0].bstrVal);
|
|
break;
|
|
}
|
|
|
|
case DISPID_PASSPORT_GET_PASSWORD:
|
|
{
|
|
if(pvarResult)
|
|
{
|
|
VariantInit(pvarResult);
|
|
V_VT(pvarResult) = VT_BSTR;
|
|
|
|
get_PassportPassword(&(pvarResult->bstrVal));
|
|
}
|
|
break;
|
|
}
|
|
|
|
case DISPID_PASSPORT_SET_PASSWORD:
|
|
{
|
|
if(pdispparams && &pdispparams[0].rgvarg[0])
|
|
set_PassportPassword(pdispparams[0].rgvarg[0].bstrVal);
|
|
break;
|
|
}
|
|
|
|
case DISPID_PASSPORT_GET_LOCALE:
|
|
{
|
|
if(pvarResult)
|
|
{
|
|
VariantInit(pvarResult);
|
|
V_VT(pvarResult) = VT_BSTR;
|
|
|
|
get_PassportLocale(&(pvarResult->bstrVal));
|
|
}
|
|
break;
|
|
}
|
|
|
|
case DISPID_PASSPORT_SET_LOCALE:
|
|
{
|
|
if(pdispparams && &pdispparams[0].rgvarg[0])
|
|
set_PassportLocale(pdispparams[0].rgvarg[0].bstrVal);
|
|
break;
|
|
}
|
|
|
|
default:
|
|
{
|
|
hr = DISP_E_MEMBERNOTFOUND;
|
|
break;
|
|
}
|
|
}
|
|
return hr;
|
|
}
|