|
|
// Copyright (c)1997-1999 Microsoft Corporation, All Rights Reserved
#include "stdafx.h"
#include "dispexa.h"
HRESULT CDispExArray::HrGetLength(ULONG* pLength) { USES_CONVERSION; HRESULT hr = S_OK; VARIANT var; BSTR bstrName = NULL; WCHAR* oleStr = NULL; DISPID dispid; DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
if (!m_piDispEx) return E_UNEXPECTED;
_ASSERTE(pLength); if (NULL == pLength) return E_INVALIDARG;
VariantInit(&var); oleStr = T2OLE(_T("length")); bstrName = ::SysAllocString(oleStr);
if (FAILED(hr = m_piDispEx->GetDispID(bstrName, fdexNameCaseSensitive, &dispid))) goto cleanup;
::SysFreeString(bstrName); bstrName = NULL; // BUG 597865
hr = m_piDispEx->InvokeEx(dispid, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispparamsNoArgs, &var, NULL, NULL);
if (FAILED(hr)) goto cleanup;
if (V_VT(&var) != VT_I4) goto cleanup;
*pLength = V_I4(&var);
cleanup: if (FAILED(hr)) { if (bstrName) ::SysFreeString(bstrName); }
return hr; }
HRESULT CDispExArray::HrGetElement(ULONG index, LPVARIANT pVar) {
USES_CONVERSION; HRESULT hr = S_OK; VARIANT var; BSTR bstrName = NULL; WCHAR* oleStr = NULL; DISPID dispid = 0; DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0}; char buffer[32];
if (!m_piDispEx) return E_UNEXPECTED;
_ASSERTE(pVar); if (NULL == pVar) return E_INVALIDARG;
VariantInit(&var); oleStr = A2OLE(_itoa(index, buffer, 10)); bstrName = ::SysAllocString(oleStr);
if (FAILED(hr = m_piDispEx->GetDispID(bstrName, fdexNameCaseSensitive, &dispid))) goto cleanup;
SysFreeString(bstrName); bstrName = NULL; // BUG 597865
hr = m_piDispEx->InvokeEx(dispid, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispparamsNoArgs, pVar, NULL, NULL);
if (FAILED(hr)) goto cleanup;
cleanup:
if (FAILED(hr)) { if (bstrName) ::SysFreeString(bstrName); }
return hr; }
|