X-Git-Url: http://git.osdn.net/view?p=seraphyscrtools%2FSeraphyScriptTools.git;a=blobdiff_plain;f=ObjectMap.cpp;fp=ObjectMap.cpp;h=e634fdf4acb6030bfb177fab3b187882efe51753;hp=c86a8ad4b799861a7a5b9c4a75bde7c3a6b0d09b;hb=82de408e53d9aef7ad24c955f28641eb7facb08c;hpb=31b7fd93b6ea8ccc4d7f091f92cc1b1227bcb077 diff --git a/ObjectMap.cpp b/ObjectMap.cpp index c86a8ad..e634fdf 100644 --- a/ObjectMap.cpp +++ b/ObjectMap.cpp @@ -3,35 +3,23 @@ #include "SeraphyScriptTools.h" #include "ObjectMap.h" #include "profilesection.h" -#include "generic.h" +#include "CComEnumDynaVARIANT.h" ///////////////////////////////////////////////////////////////////////////// // CObjectMap - -STDMETHODIMP CObjectMap::InterfaceSupportsErrorInfo(REFIID riid) -{ - static const IID* arr[] = - { - &IID_IObjectMap - }; - for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++) - { - if (IsEqualGUID(*arr[i],riid)) - return S_OK; - } - return S_FALSE; -} - STDMETHODIMP CObjectMap::FindNear(VARIANT key, VARIANT *pVal) { - CComVariant varName; ::VariantInit(pVal); - if(varName.ChangeType(VT_BSTR,&key) != S_OK){ - return DISP_E_TYPEMISMATCH; + + CComVariant varName; + HRESULT hr; + if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) { + return hr; } + VariantMap::iterator p = m_mapVariant.lower_bound(varName.bstrVal); - if(p != m_mapVariant.end()){ + if (p != m_mapVariant.end()) { // ”­Œ©‚³‚ꂽ CComVariant findkey((LPCWSTR)p->first); findkey.ChangeType(VT_BSTR); @@ -42,30 +30,36 @@ STDMETHODIMP CObjectMap::FindNear(VARIANT key, VARIANT *pVal) STDMETHODIMP CObjectMap::get_NearValue(VARIANT key, VARIANT *pVal) { - CComVariant varName; ::VariantInit(pVal); - if(varName.ChangeType(VT_BSTR,&key) != S_OK){ - return DISP_E_TYPEMISMATCH; + + CComVariant varName; + HRESULT hr; + if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) { + return hr; } + VariantMap::iterator p = m_mapVariant.lower_bound(varName.bstrVal); - if(p != m_mapVariant.end()){ + if (p != m_mapVariant.end()) { // ”­Œ©‚³‚ꂽ - VariantCopy(pVal,&p->second); + VariantCopy(pVal, &p->second); } return S_OK; } STDMETHODIMP CObjectMap::get_Value(VARIANT key, VARIANT *pVal) { - CComVariant varName; ::VariantInit(pVal); - if(varName.ChangeType(VT_BSTR,&key) != S_OK){ - return DISP_E_TYPEMISMATCH; + + CComVariant varName; + HRESULT hr; + if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) { + return hr; } + VariantMap::iterator p = m_mapVariant.find(varName.bstrVal); - if(p != m_mapVariant.end()){ + if (p != m_mapVariant.end()) { // ”­Œ©‚³‚ꂽ - VariantCopy(pVal,&p->second); + VariantCopy(pVal, &p->second); } return S_OK; } @@ -73,20 +67,22 @@ STDMETHODIMP CObjectMap::get_Value(VARIANT key, VARIANT *pVal) STDMETHODIMP CObjectMap::put_Value(VARIANT key, VARIANT newVal) { CComVariant varName; - if(varName.ChangeType(VT_BSTR,&key) != S_OK){ - return DISP_E_TYPEMISMATCH; + HRESULT hr; + if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) { + return hr; } + VariantMap::iterator p = m_mapVariant.find(varName.bstrVal); - if(p != m_mapVariant.end()){ + if (p != m_mapVariant.end()) { // Šù‘¶ - VariantCopy(&p->second,&newVal); + VariantCopy(&p->second, &newVal); } - else{ + else { // V‹K VARIANT tmp; ::VariantInit(&tmp); - VariantCopy(&tmp,&newVal); - m_mapVariant.insert(pair<_bstr_t,VARIANT>(varName.bstrVal,tmp)); + VariantCopy(&tmp, &newVal); + m_mapVariant.insert(pair<_bstr_t, VARIANT>(varName.bstrVal, tmp)); } return S_OK; } @@ -101,7 +97,7 @@ STDMETHODIMP CObjectMap::Clear() { //VARIANT‚̃NƒŠƒA‚ƘA‘z”z—ñ‚̉ð•ú VariantMap::iterator p = m_mapVariant.begin(); - while(p != m_mapVariant.end()){ + while (p != m_mapVariant.end()) { ::VariantClear(&p->second); p++; } @@ -114,16 +110,16 @@ STDMETHODIMP CObjectMap::Duplicate(IUnknown** punkVal) { *punkVal = NULL; CComObject* pMap = NULL; - if(pMap->CreateInstance(&pMap) == S_OK){ + if (pMap->CreateInstance(&pMap) == S_OK) { // Œ»Ý‚̃IƒuƒWƒFƒNƒg‚𕡐»‚·‚é VariantMap::iterator p = m_mapVariant.begin(); - while(p != m_mapVariant.end()){ + while (p != m_mapVariant.end()) { CComVariant key((LPCWSTR)p->first); key.ChangeType(VT_BSTR); - pMap->put_Value(key,p->second); + pMap->put_Value(key, p->second); p++; } - pMap->QueryInterface(IID_IUnknown,(void**)punkVal); + pMap->QueryInterface(IID_IUnknown, (void**)punkVal); } return S_OK; } @@ -132,20 +128,20 @@ STDMETHODIMP CObjectMap::CreateMap(IUnknown** punkVal) { *punkVal = NULL; CComObject* pMap = NULL; - if(pMap->CreateInstance(&pMap) == S_OK){ - pMap->QueryInterface(IID_IUnknown,(void**)punkVal); + if (SUCCEEDED(pMap->CreateInstance(&pMap))) { + return pMap->QueryInterface(IID_IUnknown, (void**)punkVal); } - return S_OK; + return E_FAIL; } STDMETHODIMP CObjectMap::get__NewEnum(IUnknown **pVal) { int mx = m_mapVariant.size(); - VARIANT* pvarArray = new VARIANT[mx+1]; + VARIANT* pvarArray = new VARIANT[mx + 1]; // Ši”[‚³‚ê‚Ä‚¢‚é–¼‘O‚Ì—ñ‹“ VariantMap::iterator p = m_mapVariant.begin(); int i = 0; - while(p != m_mapVariant.end()){ + while (p != m_mapVariant.end()) { ::VariantInit(&pvarArray[i]); pvarArray[i].vt = VT_BSTR; pvarArray[i].bstrVal = SysAllocString(p->first); @@ -154,14 +150,14 @@ STDMETHODIMP CObjectMap::get__NewEnum(IUnknown **pVal) } // —ñ‹“ƒCƒ“ƒ^[ƒtƒFƒCƒX‚̐¶¬ CComObject* pCol = NULL; - if(pCol->CreateInstance(&pCol) == S_OK){ + if (pCol->CreateInstance(&pCol) == S_OK) { pCol->AddRef(); - pCol->Init(&pvarArray[0],&pvarArray[mx],pCol,AtlFlagCopy); + pCol->Init(&pvarArray[0], &pvarArray[mx], pCol, AtlFlagCopy); *pVal = pCol; } // Šm•Û‚µ‚½ƒoƒŠƒAƒ“ƒg‚Ì”jŠü(ƒŠƒŠ[ƒX‚ðs‚¤•K—v‚ ‚è) i = 0; - while(i < mx){ + while (i < mx) { ::VariantClear(&pvarArray[i++]); } delete[]pvarArray; @@ -170,69 +166,69 @@ STDMETHODIMP CObjectMap::get__NewEnum(IUnknown **pVal) STDMETHODIMP CObjectMap::ExpandVariables(VARIANT text, VARIANT env, VARIANT *pVal) { - CComVariant varText,varEnv,varResult; - if(varText.ChangeType(VT_BSTR,&text) != S_OK){ + CComVariant varText, varEnv, varResult; + if (varText.ChangeType(VT_BSTR, &text) != S_OK) { return DISP_E_TYPEMISMATCH; } // ŠÂ‹«•Ï”‚ð“WŠJ‚·‚é‚©? BOOL bEnv = false; - if(varEnv.ChangeType(VT_I2,&env) == S_OK){ + if (varEnv.ChangeType(VT_I2, &env) == S_OK) { bEnv = varEnv.iVal; } // ƒtƒF[ƒY1 : ŠÜ‚Ü‚ê‚é•Ï”‚𒲍¸‚µ‚Ä•K—v‚ȃoƒbƒtƒ@ƒTƒCƒY‚ð‹‚ß‚é // ƒtƒF[ƒY2 ; ŽÀÛ‚É“WŠJ‚·‚é DWORD expandsize = 0; - UINT writeidx = 0; + UINT writeidx = 0; LPWSTR pExpandBuffer = NULL; - for(int phase = 0;phase < 2;phase++){ + for (int phase = 0; phase < 2; phase++) { LPCWSTR str = varText.bstrVal; UINT length = SysStringLen(varText.bstrVal); - UINT idx = 0; - while(idx < length){ - if(str[idx] == '%'){ + UINT idx = 0; + while (idx < length) { + if (str[idx] == '%') { // •Ï”“WŠJƒXƒ^[ƒg WCHAR name[MAX_PATH] = {0}; UINT len = 0; // ˜A‘±‚·‚é%‚É‚æ‚é%Ž©g‚̏o—Í‚Å‚ ‚é‚©? idx++; - if(str[idx] == '%'){ - if(phase == 0){ + if (str[idx] == '%') { + if (phase == 0) { idx++; } - else{ + else { pExpandBuffer[writeidx++] = str[idx++]; } continue; } // •Ï”–¼‚ÌŽæ‚èo‚µ - while(idx < length && str[idx] != '%'){ + while (idx < length && str[idx] != '%') { name[len++] = str[idx++]; } name[len] = 0; - if(str[idx] == '%'){ + if (str[idx] == '%') { idx++; } // •Ï”‚ÌŽÀÝƒ`ƒFƒbƒN VariantMap::iterator p = m_mapVariant.find(name); - if(p != m_mapVariant.end()){ + if (p != m_mapVariant.end()) { // ”­Œ©‚³‚ꂽ CComVariant tmp; - if(tmp.ChangeType(VT_BSTR,&p->second) == S_OK){ - if(phase == 0){ + if (tmp.ChangeType(VT_BSTR, &p->second) == S_OK) { + if (phase == 0) { // ƒtƒF[ƒY1‚̓TƒCƒY‚ðƒJƒEƒ“ƒg‚·‚邾‚¯ expandsize += SysStringLen(tmp.bstrVal); } - else{ + else { // ƒtƒF[ƒY2‚ÍŒ»ÝˆÊ’u‚ɕϐ”‚ð“WŠJ‚·‚é UINT len = SysStringLen(tmp.bstrVal); UINT i; - for(i=0;iQueryInterface(IID_ISeraphyScriptTools_ProfileSection,(void**)&pSection) != S_OK){ - return DISP_E_UNKNOWNINTERFACE; + HRESULT hr; + if (FAILED(hr = punkVal->QueryInterface( + IID_ISeraphyScriptTools_ProfileSection, (void**)&pSection))) { + return hr; } - // + CComVariant varArray; - pSection->GetKeyNames(&varArray); - if(!(varArray.vt & VT_ARRAY)){ + if (FAILED(hr = pSection->GetKeyNames(&varArray))) { + return hr; + } + if (!(varArray.vt & VT_ARRAY)) { // Internal Error return DISP_E_UNKNOWNINTERFACE; } + // ”z—ñ‚̏‡˜“IŽæ“¾ long mx = 0; - HRESULT ret = SafeArrayGetUBound(varArray.parray,1,&mx); - if(ret != S_OK){ + HRESULT ret = SafeArrayGetUBound(varArray.parray, 1, &mx); + if (ret != S_OK) { mx = -1; } + long idx = 0; - while(idx <= mx){ - CComVariant varKey,varVal; - if(SafeArrayGetElement(varArray.parray,&idx,&varKey) == S_OK){ - if(pSection->get_Value(varKey,&varVal) == S_OK){ - put_Value(varKey,varVal); + while (idx <= mx) { + CComVariant varKey, varVal; + if (SafeArrayGetElement(varArray.parray, &idx, &varKey) == S_OK) { + if (pSection->get_Value(varKey, &varVal) == S_OK) { + put_Value(varKey, varVal); } } idx++; @@ -344,16 +351,19 @@ STDMETHODIMP CObjectMap::LoadProfile(IUnknown *punkVal) STDMETHODIMP CObjectMap::SaveProfile(IUnknown *punkVal) { ISeraphyScriptTools_ProfileSection* pSection = NULL; - if(punkVal->QueryInterface(IID_ISeraphyScriptTools_ProfileSection,(void**)&pSection) != S_OK){ - return DISP_E_UNKNOWNINTERFACE; + HRESULT hr; + if (FAILED(hr = punkVal->QueryInterface( + IID_ISeraphyScriptTools_ProfileSection, (void**)&pSection))) { + return hr; } + // Ši”[‚³‚ê‚Ä‚¢‚é–¼‘O‚Ì—ñ‹“ VariantMap::iterator p = m_mapVariant.begin(); - while(p != m_mapVariant.end()){ + while (p != m_mapVariant.end()) { CComVariant varTmp; - if(varTmp.ChangeType(VT_BSTR,&p->second) == S_OK){ + if (SUCCEEDED(varTmp.ChangeType(VT_BSTR, &p->second))) { CComVariant varIdx = (BSTR)p->first; - pSection->put_Value(varIdx,varTmp); + pSection->put_Value(varIdx, varTmp); } p++; }