//********************************************************************* //* 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; }