5 #include "SetProperties.h"
7 #include "Windows/PropVariant.h"
8 #include "Common/MyString.h"
9 #include "Common/StringToInt.h"
10 #include "Common/MyCom.h"
12 #include "../../Archive/IArchive.h"
14 using namespace NWindows;
17 static void ParseNumberString(const UString &s, NCOM::CPropVariant &prop)
19 const wchar_t *endPtr;
20 UInt64 result = ConvertStringToUInt64(s, &endPtr);
21 if (endPtr - (const wchar_t *)s != s.Length())
23 else if (result <= 0xFFFFFFFF)
24 prop = (UInt32)result;
29 HRESULT SetProperties(IUnknown *unknown, const CObjectVector<CProperty> &properties)
31 if (properties.IsEmpty())
33 CMyComPtr<ISetProperties> setProperties;
34 unknown->QueryInterface(IID_ISetProperties, (void **)&setProperties);
38 UStringVector realNames;
39 CPropVariant *values = new CPropVariant[properties.Size()];
43 for(i = 0; i < properties.Size(); i++)
45 const CProperty &property = properties[i];
46 NCOM::CPropVariant propVariant;
47 if (!property.Value.IsEmpty())
48 ParseNumberString(property.Value, propVariant);
49 realNames.Add(property.Name);
50 values[i] = propVariant;
52 CRecordVector<const wchar_t *> names;
53 for(i = 0; i < realNames.Size(); i++)
54 names.Add((const wchar_t *)realNames[i]);
56 RINOK(setProperties->SetProperties(&names.Front(), values, names.Size()));