OSDN Git Service

ObjectMap, ObjectVectorの値をByRef外しするようにした。他、ソースコード整形
[seraphyscrtools/SeraphyScriptTools.git] / ObjectMap.cpp
index 5e1999d..5f05e9d 100644 (file)
@@ -2,6 +2,7 @@
 #include "stdafx.h"
 #include "SeraphyScriptTools.h"
 #include "ObjectMap.h"
+#include "generic.h"
 #include "profilesection.h"
 #include "CComEnumDynaVARIANT.h"
 
@@ -85,14 +86,20 @@ STDMETHODIMP CObjectMap::put_Value(VARIANT key, VARIANT newVal)
                return hr;
        }
 
+       // ByRef\82ðByVal\82É\95Ï\8a·\83R\83s\81[\82·\82é
+       CComVariant tmp;
+       if (FAILED(hr = VariantCopyByVal(&tmp, &newVal))) {
+               return hr;
+       }
+
        VariantMap::iterator p = m_mapVariant.find(varName.bstrVal);
        if (p != m_mapVariant.end()) {
                // \8aù\91
-               p->second = newVal;
+               p->second = tmp;
        }
        else {
                // \90V\8bK
-               m_mapVariant.insert(std::make_pair(varName.bstrVal, newVal));
+               m_mapVariant.insert(std::make_pair(varName.bstrVal, tmp));
        }
        return S_OK;
 }
@@ -366,7 +373,7 @@ STDMETHODIMP CObjectMap::LoadProfile(IUnknown *punkVal)
        long idx = 0;
        while (idx <= mx) {
                CComVariant varKey, varVal;
-               if (SafeArrayGetElement(varArray.parray, &idx, &varKey) == S_OK) {
+               if (SUCCEEDED(SafeArrayGetElement(varArray.parray, &idx, &varKey))) {
                        if (SUCCEEDED(pSection->get_Value(varKey, &varVal))) {
                                put_Value(varKey, varVal);
                        }