return hr;
}
- return pVct->QueryInterface(punkVal);
+ if (FAILED(hr = pVct->QueryInterface(punkVal))) {
+ delete pVct;
+ return hr;
+ }
+ return S_OK;
}
STDMETHODIMP CObjectVector::Duplicate(VARIANT idx, VARIANT count, IUnknown **punkVal)
return hr;
}
if (FAILED(hr = pVct->QueryInterface(punkVal))) {
+ delete pVct;
return hr;
}
STDMETHODIMP CObjectVector::Push(VARIANT newVal)
{
+ HRESULT hr;
+
+ CComVariant tmp;
+ if (FAILED(hr = VariantCopyByVal(&tmp, &newVal))) {
+ return hr;
+ }
+
// \96\96\94ö\82É\92Ç\89Á
- m_vctVariant.push_back(newVal);
+ m_vctVariant.push_back(tmp);
return S_OK;
}
return DISP_E_BADINDEX;
}
- m_vctVariant.insert(m_vctVariant.begin() + nIdx, newVal);
+ HRESULT hr;
+
+ CComVariant tmp;
+ if (FAILED(hr = VariantCopyByVal(&tmp, &newVal))) {
+ return hr;
+ }
+
+ m_vctVariant.insert(m_vctVariant.begin() + nIdx, tmp);
return S_OK;
}
long mx = m_vctVariant.size();
if (nIdx < mx) {
// \83x\83N\83^\81[\82Ì\94Í\88Í\93à\82È\82ç\92l\82ð\8eæ\93¾\82·\82é
- ::VariantCopy(pVal, &m_vctVariant[nIdx]);
+ return ::VariantCopy(pVal, &m_vctVariant[nIdx]);
}
- return S_OK;
+ return S_FALSE;
}
STDMETHODIMP CObjectVector::put_Value(VARIANT idx, VARIANT newVal)
mx++;
}
}
+
+ HRESULT hr;
+
+ CComVariant tmp;
+ if (FAILED(hr = VariantCopyByVal(&tmp, &newVal))) {
+ return hr;
+ }
+
// \83x\83N\83^\81[\82Ì\94Í\88Í\93à\82È\82ç\92l\82ð\8dÄ\90Ý\92è\82·\82é
- ::VariantClear(&m_vctVariant.at(nIdx));
- ::VariantCopy(&m_vctVariant.at(nIdx), &newVal);
- return S_OK;
+ if (FAILED(hr = ::VariantClear(&m_vctVariant.at(nIdx)))) {
+ return hr;
+ }
+
+ return ::VariantCopy(&m_vctVariant.at(nIdx), &tmp);
}
STDMETHODIMP CObjectVector::get_Count(long *pVal)
STDMETHODIMP CObjectVector::Merge(VARIANT unkVal)
{
- HRESULT ret = DISP_E_TYPEMISMATCH;
+ HRESULT hr;
+
CComVariant varUnk;
if (SUCCEEDED(varUnk.ChangeType(VT_UNKNOWN, &unkVal))) {
// \83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\8fê\8d\87
- IObjectVector* pVect = NULL;
- if (SUCCEEDED(varUnk.punkVal->QueryInterface(IID_IObjectVector, (void**)&pVect))) {
+ CComPtr<IObjectVector> pVect;
+ if (FAILED(hr = varUnk.punkVal->QueryInterface(&pVect))) {
// \8ew\92è\8aO\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\82Å\82 \82é
- return DISP_E_TYPEMISMATCH;
+ return hr;
}
+
long mx;
pVect->get_Count(&mx);
+
long i;
for (i = 0; i < mx; i++) {
CComVariant idx((long)i);
pVect->get_Value(idx, &ret);
m_vctVariant.push_back(ret);
}
- pVect->Release();
- ret = S_OK;
- }
- else {
- VARTYPE vt = VT_EMPTY;
- SAFEARRAY* pArray = GetArrayFromVariant(unkVal, &vt);
- if (pArray && vt == VT_VARIANT) {
- long lb = 0;
- long ub = 0;
- int dm = SafeArrayGetDim(pArray);
- SafeArrayGetLBound(pArray, 1, &lb); // \8d¶\91¤\82Ì\93Y\82¦\8e\9a
- SafeArrayGetUBound(pArray, 1, &ub);
- if (dm == 1 && lb == 0 && vt == VT_VARIANT) {
- // 1\8e\9f\8c³\94z\97ñ\82Å\81A0\83x\81[\83X\82Ì\83o\83\8a\83A\83\93\83g\94z\97ñ\82Å\82 \82é
- int cnt;
- long dim[1];
- for (cnt = 0; cnt <= ub; cnt++) {
- // VARIANT\82Ì\94z\97ñ\82Å\82 \82é
- VARIANT tmp;
- ::VariantInit(&tmp);
- dim[0] = cnt;
- SafeArrayGetElement(pArray, dim, &tmp);
- m_vctVariant.push_back(tmp);
- }//next(\94z\97ñ\82Ì\83\8b\81[\83v)
- ret = S_OK;
- }
- }
+ pVect.Release();
+ return S_OK;
}
- return ret;
-}
+ VARTYPE vt = VT_EMPTY;
+ SAFEARRAY* pArray = GetArrayFromVariant(unkVal, &vt);
+ if (!pArray || vt != VT_VARIANT) {
+ return S_FALSE;
+ }
+
+ long lb = 0;
+ long ub = 0;
+ int dm = SafeArrayGetDim(pArray);
+ SafeArrayGetLBound(pArray, 1, &lb); // \8d¶\91¤\82Ì\93Y\82¦\8e\9a
+ SafeArrayGetUBound(pArray, 1, &ub);
+ if (dm == 1 && lb == 0 && vt == VT_VARIANT) {
+ // 1\8e\9f\8c³\94z\97ñ\82Å\81A0\83x\81[\83X\82Ì\83o\83\8a\83A\83\93\83g\94z\97ñ\82Å\82 \82é
+ int cnt;
+ long dim[1];
+ for (cnt = 0; cnt <= ub; cnt++) {
+ // VARIANT\82Ì\94z\97ñ\82Å\82 \82é
+ VARIANT tmp;
+ ::VariantInit(&tmp);
+ dim[0] = cnt;
+ SafeArrayGetElement(pArray, dim, &tmp);
+ m_vctVariant.push_back(tmp);
+ }//next(\94z\97ñ\82Ì\83\8b\81[\83v)
+ }
+ return S_OK;
+}
STDMETHODIMP CObjectVector::MakeArray(VARIANT *pVal)
{
long mx = m_vctVariant.size();
SAFEARRAY* pArray = SafeArrayCreateVector(VT_VARIANT, 0, mx);
+ if (!pArray) {
+ return E_OUTOFMEMORY;
+ }
+
+ HRESULT hr;
+
VARIANT* pvars;
- if (SUCCEEDED(SafeArrayAccessData(pArray, (void**)&pvars))) {
- long cnt = 0;
- for (cnt = 0; cnt < mx; cnt++) {
- VariantInit(&pvars[cnt]);
- VariantCopy(&pvars[cnt], &m_vctVariant.at(cnt));
- }
- SafeArrayUnaccessData(pArray);
+ if (FAILED(hr = SafeArrayAccessData(pArray, (void**)&pvars))) {
+ SafeArrayDestroy(pArray);
+ return hr;
}
+
+ long cnt = 0;
+ for (cnt = 0; cnt < mx; cnt++) {
+ VariantInit(&pvars[cnt]);
+ VariantCopy(&pvars[cnt], &m_vctVariant.at(cnt));
+ }
+ SafeArrayUnaccessData(pArray);
+
pArray->fFeatures |= FADF_HAVEVARTYPE;
pVal->vt = VT_ARRAY | VT_VARIANT;
pVal->parray = pArray;