1*520fa265SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*520fa265SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*520fa265SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*520fa265SAndrew Rist * distributed with this work for additional information 6*520fa265SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*520fa265SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*520fa265SAndrew Rist * "License"); you may not use this file except in compliance 9*520fa265SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*520fa265SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*520fa265SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*520fa265SAndrew Rist * software distributed under the License is distributed on an 15*520fa265SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*520fa265SAndrew Rist * KIND, either express or implied. See the License for the 17*520fa265SAndrew Rist * specific language governing permissions and limitations 18*520fa265SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*520fa265SAndrew Rist *************************************************************/ 21*520fa265SAndrew Rist 22*520fa265SAndrew Rist 23cdf0e10cSrcweir #include "stdafx.h" 24cdf0e10cSrcweir //#include "AxTestComponents.h" 25cdf0e10cSrcweir #include "Basic.h" 26cdf0e10cSrcweir 27cdf0e10cSrcweir 28cdf0e10cSrcweir 29cdf0e10cSrcweir ///////////////////////////////////////////////////////////////////////////// 30cdf0e10cSrcweir // CBasic 31cdf0e10cSrcweir CBasic::CBasic(): m_cPrpByte(0),m_nPrpShort(0),m_lPrpLong(0),m_fPrpFloat(0), m_dPrpDouble(0),m_PrpArray(0), 32cdf0e10cSrcweir m_safearray(NULL), m_bool(VARIANT_FALSE), 33cdf0e10cSrcweir m_arByte(0), m_arShort(0), m_arLong(0), m_arString(0), m_arVariant(0), m_arFloat(0), 34cdf0e10cSrcweir m_arDouble(0), m_arObject(0), m_arByteDim2(0), m_date(0.), m_scode(0) 35cdf0e10cSrcweir 36cdf0e10cSrcweir { 37cdf0e10cSrcweir memset(&m_cy, 0, sizeof(CY)); 38cdf0e10cSrcweir memset(&m_decimal, 0, sizeof(DECIMAL)); 39cdf0e10cSrcweir } 40cdf0e10cSrcweir 41cdf0e10cSrcweir CBasic::~CBasic() 42cdf0e10cSrcweir { 43cdf0e10cSrcweir SafeArrayDestroy(m_safearray); 44cdf0e10cSrcweir SafeArrayDestroy(m_arByte); 45cdf0e10cSrcweir SafeArrayDestroy(m_arShort); 46cdf0e10cSrcweir SafeArrayDestroy(m_arLong); 47cdf0e10cSrcweir SafeArrayDestroy(m_arString); 48cdf0e10cSrcweir SafeArrayDestroy(m_arVariant); 49cdf0e10cSrcweir SafeArrayDestroy(m_arFloat); 50cdf0e10cSrcweir SafeArrayDestroy(m_arDouble); 51cdf0e10cSrcweir SafeArrayDestroy(m_arObject); 52cdf0e10cSrcweir SafeArrayDestroy(m_arByteDim2); 53cdf0e10cSrcweir 54cdf0e10cSrcweir } 55cdf0e10cSrcweir STDMETHODIMP CBasic::inBool(VARIANT_BOOL val) 56cdf0e10cSrcweir { 57cdf0e10cSrcweir m_bool = val; 58cdf0e10cSrcweir return S_OK; 59cdf0e10cSrcweir } 60cdf0e10cSrcweir STDMETHODIMP CBasic::inByte(unsigned char val) 61cdf0e10cSrcweir { 62cdf0e10cSrcweir m_byte = val; 63cdf0e10cSrcweir return S_OK; 64cdf0e10cSrcweir } 65cdf0e10cSrcweir 66cdf0e10cSrcweir STDMETHODIMP CBasic::inShort(short val) 67cdf0e10cSrcweir { 68cdf0e10cSrcweir m_short = val; 69cdf0e10cSrcweir return S_OK; 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir STDMETHODIMP CBasic::inLong(long val) 73cdf0e10cSrcweir { 74cdf0e10cSrcweir m_long = val; 75cdf0e10cSrcweir return S_OK; 76cdf0e10cSrcweir } 77cdf0e10cSrcweir 78cdf0e10cSrcweir STDMETHODIMP CBasic::inString(BSTR val) 79cdf0e10cSrcweir { 80cdf0e10cSrcweir m_bstr = val; 81cdf0e10cSrcweir return S_OK; 82cdf0e10cSrcweir } 83cdf0e10cSrcweir 84cdf0e10cSrcweir STDMETHODIMP CBasic::inFloat(float val) 85cdf0e10cSrcweir { 86cdf0e10cSrcweir m_float = val; 87cdf0e10cSrcweir return S_OK; 88cdf0e10cSrcweir } 89cdf0e10cSrcweir 90cdf0e10cSrcweir STDMETHODIMP CBasic::inDouble(double val) 91cdf0e10cSrcweir { 92cdf0e10cSrcweir m_double = val; 93cdf0e10cSrcweir 94cdf0e10cSrcweir CComVariant varDest; 95cdf0e10cSrcweir CComVariant varSource(val); 96cdf0e10cSrcweir HRESULT hr = VariantChangeType(&varDest, &varSource, 0, VT_BSTR); 97cdf0e10cSrcweir return S_OK; 98cdf0e10cSrcweir } 99cdf0e10cSrcweir 100cdf0e10cSrcweir STDMETHODIMP CBasic::inVariant(VARIANT val) 101cdf0e10cSrcweir { 102cdf0e10cSrcweir m_var1 = val; 103cdf0e10cSrcweir return S_OK; 104cdf0e10cSrcweir } 105cdf0e10cSrcweir 106cdf0e10cSrcweir STDMETHODIMP CBasic::inArray(LPSAFEARRAY val) 107cdf0e10cSrcweir { 108cdf0e10cSrcweir HRESULT hr = S_OK; 109cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_safearray))) 110cdf0e10cSrcweir return hr; 111cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, &m_safearray))) 112cdf0e10cSrcweir return hr; 113cdf0e10cSrcweir return S_OK; 114cdf0e10cSrcweir } 115cdf0e10cSrcweir 116cdf0e10cSrcweir STDMETHODIMP CBasic::inObject(IDispatch *val) 117cdf0e10cSrcweir { 118cdf0e10cSrcweir m_obj = val; 119cdf0e10cSrcweir return S_OK; 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir STDMETHODIMP CBasic::inoutBool(VARIANT_BOOL* val) 123cdf0e10cSrcweir { 124cdf0e10cSrcweir VARIANT_BOOL aBool = *val; 125cdf0e10cSrcweir *val = m_bool; 126cdf0e10cSrcweir m_bool = aBool; 127cdf0e10cSrcweir return S_OK; 128cdf0e10cSrcweir } 129cdf0e10cSrcweir 130cdf0e10cSrcweir 131cdf0e10cSrcweir STDMETHODIMP CBasic::inoutByte(unsigned char* val) 132cdf0e10cSrcweir { 133cdf0e10cSrcweir unsigned char aByte = *val; 134cdf0e10cSrcweir *val = m_byte; 135cdf0e10cSrcweir m_byte = aByte; 136cdf0e10cSrcweir return S_OK; 137cdf0e10cSrcweir } 138cdf0e10cSrcweir 139cdf0e10cSrcweir STDMETHODIMP CBasic::inoutShort(short *val) 140cdf0e10cSrcweir { 141cdf0e10cSrcweir short aShort = *val; 142cdf0e10cSrcweir *val = m_short; 143cdf0e10cSrcweir m_short = aShort; 144cdf0e10cSrcweir return S_OK; 145cdf0e10cSrcweir } 146cdf0e10cSrcweir 147cdf0e10cSrcweir STDMETHODIMP CBasic::inoutLong(long *val) 148cdf0e10cSrcweir { 149cdf0e10cSrcweir long aLong = *val; 150cdf0e10cSrcweir *val = m_long; 151cdf0e10cSrcweir m_long = aLong; 152cdf0e10cSrcweir return S_OK; 153cdf0e10cSrcweir } 154cdf0e10cSrcweir 155cdf0e10cSrcweir STDMETHODIMP CBasic::inoutString(BSTR *val) 156cdf0e10cSrcweir { 157cdf0e10cSrcweir CComBSTR aStr = *val; 158cdf0e10cSrcweir HRESULT hr = S_OK; 159cdf0e10cSrcweir if (FAILED( hr = m_bstr.CopyTo(val))) 160cdf0e10cSrcweir return hr; 161cdf0e10cSrcweir m_bstr = aStr; 162cdf0e10cSrcweir return S_OK; 163cdf0e10cSrcweir } 164cdf0e10cSrcweir 165cdf0e10cSrcweir STDMETHODIMP CBasic::inoutFloat(float *val) 166cdf0e10cSrcweir { 167cdf0e10cSrcweir float aFloat = *val; 168cdf0e10cSrcweir *val = m_float; 169cdf0e10cSrcweir m_float = aFloat; 170cdf0e10cSrcweir return S_OK; 171cdf0e10cSrcweir } 172cdf0e10cSrcweir 173cdf0e10cSrcweir STDMETHODIMP CBasic::inoutDouble(double *val) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir double aDouble = *val; 176cdf0e10cSrcweir *val = m_double; 177cdf0e10cSrcweir m_double = aDouble; 178cdf0e10cSrcweir return S_OK; 179cdf0e10cSrcweir } 180cdf0e10cSrcweir 181cdf0e10cSrcweir STDMETHODIMP CBasic::inoutVariant(VARIANT *val) 182cdf0e10cSrcweir { 183cdf0e10cSrcweir CComVariant aVar = *val; 184cdf0e10cSrcweir HRESULT hr = S_OK; 185cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val, &m_var1))) 186cdf0e10cSrcweir return hr; 187cdf0e10cSrcweir m_var1 = aVar; 188cdf0e10cSrcweir return S_OK; 189cdf0e10cSrcweir } 190cdf0e10cSrcweir 191cdf0e10cSrcweir /* The array contains VARIANT according to IDL. 192cdf0e10cSrcweir If the VARIANTs contain strings then we append "out" to each string. 193cdf0e10cSrcweir */ 194cdf0e10cSrcweir STDMETHODIMP CBasic::inoutArray(LPSAFEARRAY *val) 195cdf0e10cSrcweir { 196cdf0e10cSrcweir SAFEARRAY* aAr = NULL; 197cdf0e10cSrcweir HRESULT hr = S_OK; 198cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(*val, &aAr))) 199cdf0e10cSrcweir return hr; 200cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(m_safearray, val))) 201cdf0e10cSrcweir return hr; 202cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(aAr, & m_safearray))) 203cdf0e10cSrcweir return hr; 204cdf0e10cSrcweir return S_OK; 205cdf0e10cSrcweir } 206cdf0e10cSrcweir 207cdf0e10cSrcweir STDMETHODIMP CBasic::inoutObject(IDispatch **val) 208cdf0e10cSrcweir { 209cdf0e10cSrcweir CComPtr<IDispatch> disp = *val; 210cdf0e10cSrcweir if (*val) 211cdf0e10cSrcweir (*val)->Release(); 212cdf0e10cSrcweir *val = m_obj; 213cdf0e10cSrcweir if (*val) 214cdf0e10cSrcweir (*val)->AddRef(); 215cdf0e10cSrcweir m_obj = disp; 216cdf0e10cSrcweir return S_OK; 217cdf0e10cSrcweir } 218cdf0e10cSrcweir 219cdf0e10cSrcweir 220cdf0e10cSrcweir STDMETHODIMP CBasic::outBool(VARIANT_BOOL* val) 221cdf0e10cSrcweir { 222cdf0e10cSrcweir *val = m_bool; 223cdf0e10cSrcweir return S_OK; 224cdf0e10cSrcweir } 225cdf0e10cSrcweir 226cdf0e10cSrcweir STDMETHODIMP CBasic::outByte(unsigned char *val) 227cdf0e10cSrcweir { 228cdf0e10cSrcweir *val= m_byte; 229cdf0e10cSrcweir return S_OK; 230cdf0e10cSrcweir } 231cdf0e10cSrcweir 232cdf0e10cSrcweir STDMETHODIMP CBasic::outShort(short *val) 233cdf0e10cSrcweir { 234cdf0e10cSrcweir *val= m_short; 235cdf0e10cSrcweir return S_OK; 236cdf0e10cSrcweir } 237cdf0e10cSrcweir 238cdf0e10cSrcweir STDMETHODIMP CBasic::outLong(long *val) 239cdf0e10cSrcweir { 240cdf0e10cSrcweir *val= m_long; 241cdf0e10cSrcweir return S_OK; 242cdf0e10cSrcweir } 243cdf0e10cSrcweir 244cdf0e10cSrcweir STDMETHODIMP CBasic::outString(BSTR *val) 245cdf0e10cSrcweir { 246cdf0e10cSrcweir *val= SysAllocString(m_bstr); 247cdf0e10cSrcweir return S_OK; 248cdf0e10cSrcweir } 249cdf0e10cSrcweir 250cdf0e10cSrcweir STDMETHODIMP CBasic::outFloat(float *val) 251cdf0e10cSrcweir { 252cdf0e10cSrcweir *val= m_float; 253cdf0e10cSrcweir return S_OK; 254cdf0e10cSrcweir } 255cdf0e10cSrcweir 256cdf0e10cSrcweir STDMETHODIMP CBasic::outDouble(double *val) 257cdf0e10cSrcweir { 258cdf0e10cSrcweir *val= m_double; 259cdf0e10cSrcweir return S_OK; 260cdf0e10cSrcweir } 261cdf0e10cSrcweir 262cdf0e10cSrcweir STDMETHODIMP CBasic::outVariant(VARIANT *val) 263cdf0e10cSrcweir { 264cdf0e10cSrcweir HRESULT hr = S_OK; 265cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val, &m_var1))) 266cdf0e10cSrcweir return hr; 267cdf0e10cSrcweir return S_OK; 268cdf0e10cSrcweir } 269cdf0e10cSrcweir 270cdf0e10cSrcweir STDMETHODIMP CBasic::outArray(LPSAFEARRAY *val) 271cdf0e10cSrcweir { 272cdf0e10cSrcweir HRESULT hr = S_OK; 273cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(m_safearray, val))) 274cdf0e10cSrcweir return false; 275cdf0e10cSrcweir return S_OK; 276cdf0e10cSrcweir } 277cdf0e10cSrcweir 278cdf0e10cSrcweir STDMETHODIMP CBasic::outObject(IDispatch* *val) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir *val = m_obj; 281cdf0e10cSrcweir if (m_obj) 282cdf0e10cSrcweir (*val)->AddRef(); 283cdf0e10cSrcweir 284cdf0e10cSrcweir return S_OK; 285cdf0e10cSrcweir } 286cdf0e10cSrcweir 287cdf0e10cSrcweir 288cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpBool(VARIANT_BOOL* pVal) 289cdf0e10cSrcweir { 290cdf0e10cSrcweir if (!pVal) return E_POINTER; 291cdf0e10cSrcweir *pVal = m_bool; 292cdf0e10cSrcweir return S_OK; 293cdf0e10cSrcweir } 294cdf0e10cSrcweir 295cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpBool(VARIANT_BOOL val) 296cdf0e10cSrcweir { 297cdf0e10cSrcweir m_bool = val; 298cdf0e10cSrcweir return S_OK; 299cdf0e10cSrcweir } 300cdf0e10cSrcweir 301cdf0e10cSrcweir 302cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpByte(unsigned char *pVal) 303cdf0e10cSrcweir { 304cdf0e10cSrcweir if( !pVal) 305cdf0e10cSrcweir return E_POINTER; 306cdf0e10cSrcweir *pVal= m_cPrpByte; 307cdf0e10cSrcweir return S_OK; 308cdf0e10cSrcweir } 309cdf0e10cSrcweir 310cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpByte(unsigned char newVal) 311cdf0e10cSrcweir { 312cdf0e10cSrcweir m_cPrpByte= newVal; 313cdf0e10cSrcweir return S_OK; 314cdf0e10cSrcweir } 315cdf0e10cSrcweir 316cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpShort(short *pVal) 317cdf0e10cSrcweir { 318cdf0e10cSrcweir if( !pVal) 319cdf0e10cSrcweir return E_POINTER; 320cdf0e10cSrcweir *pVal= m_nPrpShort; 321cdf0e10cSrcweir return S_OK; 322cdf0e10cSrcweir } 323cdf0e10cSrcweir 324cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpShort(short newVal) 325cdf0e10cSrcweir { 326cdf0e10cSrcweir m_nPrpShort= newVal; 327cdf0e10cSrcweir return S_OK; 328cdf0e10cSrcweir } 329cdf0e10cSrcweir 330cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpLong(long *pVal) 331cdf0e10cSrcweir { 332cdf0e10cSrcweir if( !pVal) 333cdf0e10cSrcweir return E_POINTER; 334cdf0e10cSrcweir *pVal= m_lPrpLong; 335cdf0e10cSrcweir return S_OK; 336cdf0e10cSrcweir } 337cdf0e10cSrcweir 338cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpLong(long newVal) 339cdf0e10cSrcweir { 340cdf0e10cSrcweir m_lPrpLong= newVal; 341cdf0e10cSrcweir return S_OK; 342cdf0e10cSrcweir } 343cdf0e10cSrcweir 344cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpString(BSTR *pVal) 345cdf0e10cSrcweir { 346cdf0e10cSrcweir if( !pVal) 347cdf0e10cSrcweir return E_POINTER; 348cdf0e10cSrcweir m_bstrPrpString.CopyTo( pVal ); 349cdf0e10cSrcweir return S_OK; 350cdf0e10cSrcweir } 351cdf0e10cSrcweir 352cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpString(BSTR newVal) 353cdf0e10cSrcweir { 354cdf0e10cSrcweir m_bstrPrpString= newVal; 355cdf0e10cSrcweir return S_OK; 356cdf0e10cSrcweir } 357cdf0e10cSrcweir 358cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpFloat(float *pVal) 359cdf0e10cSrcweir { 360cdf0e10cSrcweir if( !pVal) 361cdf0e10cSrcweir return E_POINTER; 362cdf0e10cSrcweir *pVal= m_fPrpFloat; 363cdf0e10cSrcweir return S_OK; 364cdf0e10cSrcweir } 365cdf0e10cSrcweir 366cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpFloat(float newVal) 367cdf0e10cSrcweir { 368cdf0e10cSrcweir m_fPrpFloat= newVal; 369cdf0e10cSrcweir return S_OK; 370cdf0e10cSrcweir } 371cdf0e10cSrcweir 372cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpDouble(double *pVal) 373cdf0e10cSrcweir { 374cdf0e10cSrcweir if( !pVal) 375cdf0e10cSrcweir return E_POINTER; 376cdf0e10cSrcweir *pVal= m_dPrpDouble; 377cdf0e10cSrcweir return S_OK; 378cdf0e10cSrcweir } 379cdf0e10cSrcweir 380cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpDouble(double newVal) 381cdf0e10cSrcweir { 382cdf0e10cSrcweir m_dPrpDouble= newVal; 383cdf0e10cSrcweir return S_OK; 384cdf0e10cSrcweir } 385cdf0e10cSrcweir 386cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpVariant(VARIANT *pVal) 387cdf0e10cSrcweir { 388cdf0e10cSrcweir if( !pVal) 389cdf0e10cSrcweir return E_POINTER; 390cdf0e10cSrcweir HRESULT hr = S_OK; 391cdf0e10cSrcweir if (FAILED(hr = VariantCopy( pVal, &m_PropVariant))) 392cdf0e10cSrcweir return hr; 393cdf0e10cSrcweir return hr; 394cdf0e10cSrcweir } 395cdf0e10cSrcweir 396cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpVariant(VARIANT newVal) 397cdf0e10cSrcweir { 398cdf0e10cSrcweir m_PropVariant= newVal; 399cdf0e10cSrcweir return S_OK; 400cdf0e10cSrcweir } 401cdf0e10cSrcweir 402cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpArray(LPSAFEARRAY *pVal) 403cdf0e10cSrcweir { 404cdf0e10cSrcweir if( !pVal) 405cdf0e10cSrcweir return E_POINTER; 406cdf0e10cSrcweir HRESULT hr = S_OK; 407cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy( m_PrpArray, pVal))) 408cdf0e10cSrcweir return hr; 409cdf0e10cSrcweir return hr; 410cdf0e10cSrcweir } 411cdf0e10cSrcweir 412cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpArray(LPSAFEARRAY newVal) 413cdf0e10cSrcweir { 414cdf0e10cSrcweir HRESULT hr = S_OK; 415cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy( m_PrpArray))) 416cdf0e10cSrcweir return hr; 417cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy( newVal, &m_PrpArray))) 418cdf0e10cSrcweir return hr; 419cdf0e10cSrcweir return hr; 420cdf0e10cSrcweir } 421cdf0e10cSrcweir 422cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpObject(IDispatch **pVal) 423cdf0e10cSrcweir { 424cdf0e10cSrcweir if( !pVal) 425cdf0e10cSrcweir return E_POINTER; 426cdf0e10cSrcweir *pVal= m_PrpObject; 427cdf0e10cSrcweir if( *pVal != NULL) 428cdf0e10cSrcweir (*pVal)->AddRef(); 429cdf0e10cSrcweir return S_OK; 430cdf0e10cSrcweir } 431cdf0e10cSrcweir 432cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpObject(IDispatch *newVal) 433cdf0e10cSrcweir { 434cdf0e10cSrcweir m_PrpObject= newVal; 435cdf0e10cSrcweir return S_OK; 436cdf0e10cSrcweir } 437cdf0e10cSrcweir 438cdf0e10cSrcweir STDMETHODIMP CBasic::mixed1( 439cdf0e10cSrcweir /* [out][in] */ unsigned char *aChar, 440cdf0e10cSrcweir /* [out][in] */ float *aFloat, 441cdf0e10cSrcweir /* [out][in] */ VARIANT *aVar) 442cdf0e10cSrcweir 443cdf0e10cSrcweir { 444cdf0e10cSrcweir HRESULT hr= S_OK; 445cdf0e10cSrcweir inoutByte(aChar); 446cdf0e10cSrcweir inoutFloat(aFloat); 447cdf0e10cSrcweir inoutVariant(aVar); 448cdf0e10cSrcweir return hr; 449cdf0e10cSrcweir } 450cdf0e10cSrcweir 451cdf0e10cSrcweir 452cdf0e10cSrcweir 453cdf0e10cSrcweir 454cdf0e10cSrcweir // VT_UI1 455cdf0e10cSrcweir 456cdf0e10cSrcweir STDMETHODIMP CBasic::inSequenceLong(LPSAFEARRAY val) 457cdf0e10cSrcweir { 458cdf0e10cSrcweir HRESULT hr = S_OK; 459cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_arLong))) 460cdf0e10cSrcweir return hr; 461cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, & m_arLong))) 462cdf0e10cSrcweir return hr; 463cdf0e10cSrcweir return hr; 464cdf0e10cSrcweir } 465cdf0e10cSrcweir 466cdf0e10cSrcweir STDMETHODIMP CBasic::inSequenceByte( LPSAFEARRAY val) 467cdf0e10cSrcweir { 468cdf0e10cSrcweir HRESULT hr = S_OK; 469cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_arByte))) 470cdf0e10cSrcweir return hr; 471cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, & m_arByte))) 472cdf0e10cSrcweir return hr; 473cdf0e10cSrcweir return hr; 474cdf0e10cSrcweir } 475cdf0e10cSrcweir 476cdf0e10cSrcweir STDMETHODIMP CBasic::inSequenceShort(LPSAFEARRAY val) 477cdf0e10cSrcweir { 478cdf0e10cSrcweir HRESULT hr = S_OK; 479cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_arShort))) 480cdf0e10cSrcweir return hr; 481cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, & m_arShort))) 482cdf0e10cSrcweir return hr; 483cdf0e10cSrcweir return hr; 484cdf0e10cSrcweir } 485cdf0e10cSrcweir 486cdf0e10cSrcweir STDMETHODIMP CBasic::inSequenceString(LPSAFEARRAY val) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir HRESULT hr = S_OK; 489cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_arString))) 490cdf0e10cSrcweir return hr; 491cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, & m_arString))) 492cdf0e10cSrcweir return hr; 493cdf0e10cSrcweir return hr; 494cdf0e10cSrcweir } 495cdf0e10cSrcweir 496cdf0e10cSrcweir STDMETHODIMP CBasic::inSequenceFloat(LPSAFEARRAY val) 497cdf0e10cSrcweir { 498cdf0e10cSrcweir HRESULT hr = S_OK; 499cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_arFloat))) 500cdf0e10cSrcweir return hr; 501cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, & m_arFloat))) 502cdf0e10cSrcweir return hr; 503cdf0e10cSrcweir return hr; 504cdf0e10cSrcweir } 505cdf0e10cSrcweir 506cdf0e10cSrcweir STDMETHODIMP CBasic::inSequenceDouble(LPSAFEARRAY val) 507cdf0e10cSrcweir { 508cdf0e10cSrcweir HRESULT hr = S_OK; 509cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_arDouble))) 510cdf0e10cSrcweir return hr; 511cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, & m_arDouble))) 512cdf0e10cSrcweir return hr; 513cdf0e10cSrcweir return hr; 514cdf0e10cSrcweir } 515cdf0e10cSrcweir 516cdf0e10cSrcweir STDMETHODIMP CBasic::inSequenceObject(LPSAFEARRAY val) 517cdf0e10cSrcweir { 518cdf0e10cSrcweir HRESULT hr = S_OK; 519cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_arObject))) 520cdf0e10cSrcweir return hr; 521cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, & m_arObject))) 522cdf0e10cSrcweir return hr; 523cdf0e10cSrcweir return hr; 524cdf0e10cSrcweir } 525cdf0e10cSrcweir 526cdf0e10cSrcweir void CBasic::printArray( LPSAFEARRAY val, BSTR message, VARTYPE type) 527cdf0e10cSrcweir { 528cdf0e10cSrcweir 529cdf0e10cSrcweir HRESULT hr= S_OK; 530cdf0e10cSrcweir USES_CONVERSION; 531cdf0e10cSrcweir long lbound=0; 532cdf0e10cSrcweir long ubound= 0; 533cdf0e10cSrcweir hr= SafeArrayGetLBound( val, 1, &lbound); 534cdf0e10cSrcweir hr= SafeArrayGetUBound( val, 1, &ubound); 535cdf0e10cSrcweir long length= ubound - lbound +1; 536cdf0e10cSrcweir 537cdf0e10cSrcweir CComVariant varElement; 538cdf0e10cSrcweir char buf[1024]; 539cdf0e10cSrcweir sprintf( buf,"%s", W2A(message)); 540cdf0e10cSrcweir 541cdf0e10cSrcweir for( long i= 0; i < length ; i++) 542cdf0e10cSrcweir { 543cdf0e10cSrcweir char tmp[1024]; 544cdf0e10cSrcweir long data=0; 545cdf0e10cSrcweir CComVariant var; 546cdf0e10cSrcweir switch( type) 547cdf0e10cSrcweir { 548cdf0e10cSrcweir case VT_UI1: 549cdf0e10cSrcweir case VT_I2: 550cdf0e10cSrcweir case VT_I4: 551cdf0e10cSrcweir case VT_ERROR: 552cdf0e10cSrcweir hr= SafeArrayGetElement( val, &i, (void*)&data); 553cdf0e10cSrcweir sprintf( tmp, "%d \n", *(long*)&data); 554cdf0e10cSrcweir break; 555cdf0e10cSrcweir case VT_BSTR: 556cdf0e10cSrcweir hr= SafeArrayGetElement( val, &i, (void*)&data); 557cdf0e10cSrcweir sprintf( tmp, "%S \n", (BSTR)data); 558cdf0e10cSrcweir break; 559cdf0e10cSrcweir case VT_VARIANT: 560cdf0e10cSrcweir hr= SafeArrayGetElement( val, &i, &var); 561cdf0e10cSrcweir sprintf( tmp, "%x \n", var.byref); 562cdf0e10cSrcweir break; 563cdf0e10cSrcweir case VT_R4: 564cdf0e10cSrcweir hr= SafeArrayGetElement( val, &i, (void*)&data); 565cdf0e10cSrcweir sprintf( tmp, "%f \n", *(float*) &data); 566cdf0e10cSrcweir break; 567cdf0e10cSrcweir case VT_R8: ; 568cdf0e10cSrcweir hr= SafeArrayGetElement( val, &i, (void*)&data); 569cdf0e10cSrcweir sprintf( tmp, "%f \n", *(double*) &data); 570cdf0e10cSrcweir break; 571cdf0e10cSrcweir case VT_DISPATCH: 572cdf0e10cSrcweir // we assume the objects are instances of this component and have the 573cdf0e10cSrcweir // property prpString set. 574cdf0e10cSrcweir hr= SafeArrayGetElement( val, &i, (void*)&data); 575cdf0e10cSrcweir IDispatch* pdisp= ( IDispatch*) data; 576cdf0e10cSrcweir CComDispatchDriver driver( pdisp); 577cdf0e10cSrcweir CComVariant var; 578cdf0e10cSrcweir if( pdisp) 579cdf0e10cSrcweir { 580cdf0e10cSrcweir driver.GetPropertyByName(L"prpString", &var); 581cdf0e10cSrcweir sprintf( tmp, "%x : %S \n", *(long*)&data, var.bstrVal); 582cdf0e10cSrcweir } 583cdf0e10cSrcweir else 584cdf0e10cSrcweir sprintf( tmp, "%x\n", *(long*)&data); 585cdf0e10cSrcweir } 586cdf0e10cSrcweir 587cdf0e10cSrcweir strcat( buf, tmp); 588cdf0e10cSrcweir } 589cdf0e10cSrcweir MessageBox( NULL, _T(A2T(buf)), _T("AxTestComponents.Basic"), MB_OK); 590cdf0e10cSrcweir 591cdf0e10cSrcweir } 592cdf0e10cSrcweir // V_ERROR OLECHAR VARIANT VT_UI1 593cdf0e10cSrcweir 594cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceByte(LPSAFEARRAY* val) 595cdf0e10cSrcweir { 596cdf0e10cSrcweir HRESULT hr= S_OK; 597cdf0e10cSrcweir hr = SafeArrayCopy(m_arByte, val); 598cdf0e10cSrcweir return hr; 599cdf0e10cSrcweir } 600cdf0e10cSrcweir 601cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceShort(LPSAFEARRAY* val) 602cdf0e10cSrcweir { 603cdf0e10cSrcweir HRESULT hr= S_OK; 604cdf0e10cSrcweir hr = SafeArrayCopy(m_arShort, val); 605cdf0e10cSrcweir return hr; 606cdf0e10cSrcweir } 607cdf0e10cSrcweir 608cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceLong(LPSAFEARRAY* val) 609cdf0e10cSrcweir { 610cdf0e10cSrcweir HRESULT hr= S_OK; 611cdf0e10cSrcweir hr = SafeArrayCopy(m_arLong, val); 612cdf0e10cSrcweir return hr; 613cdf0e10cSrcweir } 614cdf0e10cSrcweir 615cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceString(LPSAFEARRAY* val) 616cdf0e10cSrcweir { 617cdf0e10cSrcweir HRESULT hr= S_OK; 618cdf0e10cSrcweir hr = SafeArrayCopy(m_arString, val); 619cdf0e10cSrcweir return hr; 620cdf0e10cSrcweir } 621cdf0e10cSrcweir 622cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceFloat(LPSAFEARRAY* val) 623cdf0e10cSrcweir { 624cdf0e10cSrcweir HRESULT hr= S_OK; 625cdf0e10cSrcweir hr = SafeArrayCopy(m_arFloat, val); 626cdf0e10cSrcweir return hr; 627cdf0e10cSrcweir } 628cdf0e10cSrcweir 629cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceDouble(LPSAFEARRAY* val) 630cdf0e10cSrcweir { 631cdf0e10cSrcweir HRESULT hr= S_OK; 632cdf0e10cSrcweir hr = SafeArrayCopy(m_arDouble, val); 633cdf0e10cSrcweir return hr; 634cdf0e10cSrcweir } 635cdf0e10cSrcweir 636cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceObject(LPSAFEARRAY* val) 637cdf0e10cSrcweir { 638cdf0e10cSrcweir HRESULT hr = S_OK; 639cdf0e10cSrcweir hr = SafeArrayCopy(m_arObject, val); 640cdf0e10cSrcweir return S_OK; 641cdf0e10cSrcweir } 642cdf0e10cSrcweir 643cdf0e10cSrcweir STDMETHODIMP CBasic::inoutSequenceByte(LPSAFEARRAY* val) 644cdf0e10cSrcweir { 645cdf0e10cSrcweir HRESULT hr = S_OK; 646cdf0e10cSrcweir SAFEARRAY *arTemp = NULL; 647cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(*val, &arTemp))) 648cdf0e10cSrcweir return hr; 649cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(m_arByte, val))) 650cdf0e10cSrcweir return hr; 651cdf0e10cSrcweir m_arByte = arTemp; 652cdf0e10cSrcweir return hr; 653cdf0e10cSrcweir } 654cdf0e10cSrcweir 655cdf0e10cSrcweir STDMETHODIMP CBasic::inoutSequenceShort(LPSAFEARRAY* val) 656cdf0e10cSrcweir { 657cdf0e10cSrcweir HRESULT hr = S_OK; 658cdf0e10cSrcweir SAFEARRAY *arTemp = NULL; 659cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(*val, &arTemp))) 660cdf0e10cSrcweir return hr; 661cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(m_arShort, val))) 662cdf0e10cSrcweir return hr; 663cdf0e10cSrcweir m_arShort = arTemp; 664cdf0e10cSrcweir return hr; 665cdf0e10cSrcweir } 666cdf0e10cSrcweir 667cdf0e10cSrcweir STDMETHODIMP CBasic::inoutSequenceLong(LPSAFEARRAY* val) 668cdf0e10cSrcweir { 669cdf0e10cSrcweir HRESULT hr = S_OK; 670cdf0e10cSrcweir SAFEARRAY *arTemp = NULL; 671cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(*val, &arTemp))) 672cdf0e10cSrcweir return hr; 673cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(m_arLong, val))) 674cdf0e10cSrcweir return hr; 675cdf0e10cSrcweir m_arLong = arTemp; 676cdf0e10cSrcweir return hr; 677cdf0e10cSrcweir } 678cdf0e10cSrcweir 679cdf0e10cSrcweir STDMETHODIMP CBasic::inoutSequenceString(LPSAFEARRAY* val) 680cdf0e10cSrcweir { 681cdf0e10cSrcweir HRESULT hr = S_OK; 682cdf0e10cSrcweir SAFEARRAY *arTemp = NULL; 683cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(*val, &arTemp))) 684cdf0e10cSrcweir return hr; 685cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(m_arString, val))) 686cdf0e10cSrcweir return hr; 687cdf0e10cSrcweir m_arString = arTemp; 688cdf0e10cSrcweir return hr; 689cdf0e10cSrcweir } 690cdf0e10cSrcweir 691cdf0e10cSrcweir STDMETHODIMP CBasic::inoutSequenceFloat(LPSAFEARRAY* val) 692cdf0e10cSrcweir { 693cdf0e10cSrcweir HRESULT hr = S_OK; 694cdf0e10cSrcweir SAFEARRAY *arTemp = NULL; 695cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(*val, &arTemp))) 696cdf0e10cSrcweir return hr; 697cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(m_arFloat, val))) 698cdf0e10cSrcweir return hr; 699cdf0e10cSrcweir m_arFloat = arTemp; 700cdf0e10cSrcweir return hr; 701cdf0e10cSrcweir } 702cdf0e10cSrcweir 703cdf0e10cSrcweir STDMETHODIMP CBasic::inoutSequenceDouble(LPSAFEARRAY* val) 704cdf0e10cSrcweir { 705cdf0e10cSrcweir HRESULT hr = S_OK; 706cdf0e10cSrcweir SAFEARRAY *arTemp = NULL; 707cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(*val, &arTemp))) 708cdf0e10cSrcweir return hr; 709cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(m_arDouble, val))) 710cdf0e10cSrcweir return hr; 711cdf0e10cSrcweir m_arDouble = arTemp; 712cdf0e10cSrcweir return hr; 713cdf0e10cSrcweir } 714cdf0e10cSrcweir 715cdf0e10cSrcweir STDMETHODIMP CBasic::inoutSequenceObject(LPSAFEARRAY* val) 716cdf0e10cSrcweir { 717cdf0e10cSrcweir HRESULT hr = S_OK; 718cdf0e10cSrcweir SAFEARRAY *arTemp = NULL; 719cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(*val, &arTemp))) 720cdf0e10cSrcweir return hr; 721cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(m_arObject, val))) 722cdf0e10cSrcweir return hr; 723cdf0e10cSrcweir m_arObject = arTemp; 724cdf0e10cSrcweir return hr; 725cdf0e10cSrcweir } 726cdf0e10cSrcweir 727cdf0e10cSrcweir // 2-dimensional Array 728cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayLong(LPSAFEARRAY val) 729cdf0e10cSrcweir { 730cdf0e10cSrcweir printMulArray( val, VT_I4); 731cdf0e10cSrcweir return S_OK; 732cdf0e10cSrcweir } 733cdf0e10cSrcweir // 2-dimensional Array 734cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayVariant(LPSAFEARRAY val) 735cdf0e10cSrcweir { 736cdf0e10cSrcweir printMulArray( val, VT_VARIANT); 737cdf0e10cSrcweir return S_OK; 738cdf0e10cSrcweir } 739cdf0e10cSrcweir // 3-dimensional Array 740cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayLong2(LPSAFEARRAY val) 741cdf0e10cSrcweir { 742cdf0e10cSrcweir printMulArray( val, VT_I4); 743cdf0e10cSrcweir return S_OK; 744cdf0e10cSrcweir } 745cdf0e10cSrcweir // 3-dimensional Array 746cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayVariant2(LPSAFEARRAY val) 747cdf0e10cSrcweir { 748cdf0e10cSrcweir return S_OK; 749cdf0e10cSrcweir } 750cdf0e10cSrcweir 751cdf0e10cSrcweir 752cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayByte(LPSAFEARRAY val) 753cdf0e10cSrcweir { 754cdf0e10cSrcweir HRESULT hr = S_OK; 755cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_arByteDim2))) 756cdf0e10cSrcweir return hr; 757cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, & m_arByteDim2))) 758cdf0e10cSrcweir return hr; 759cdf0e10cSrcweir return hr; 760cdf0e10cSrcweir } 761cdf0e10cSrcweir // 3-dimensionales array 762cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayByte2(LPSAFEARRAY val) 763cdf0e10cSrcweir { 764cdf0e10cSrcweir 765cdf0e10cSrcweir // TODO: Add your implementation code here 766cdf0e10cSrcweir //printMulArray( val, VT_UI1); 767cdf0e10cSrcweir return S_OK; 768cdf0e10cSrcweir } 769cdf0e10cSrcweir 770cdf0e10cSrcweir // supports 2 and 3 dimensionals SAFEARRAY with elements of long or VARIANT 771cdf0e10cSrcweir void CBasic::printMulArray( SAFEARRAY* val, VARTYPE type) 772cdf0e10cSrcweir { 773cdf0e10cSrcweir HRESULT hr= S_OK; 774cdf0e10cSrcweir UINT dims= SafeArrayGetDim( val); 775cdf0e10cSrcweir long lbound1; 776cdf0e10cSrcweir long ubound1; 777cdf0e10cSrcweir long lbound2; 778cdf0e10cSrcweir long ubound2; 779cdf0e10cSrcweir long lbound3; 780cdf0e10cSrcweir long ubound3; 781cdf0e10cSrcweir long length1; 782cdf0e10cSrcweir long length2; 783cdf0e10cSrcweir long length3; 784cdf0e10cSrcweir 785cdf0e10cSrcweir char buff[4096]; 786cdf0e10cSrcweir buff[0]=0; 787cdf0e10cSrcweir 788cdf0e10cSrcweir if( dims == 2) 789cdf0e10cSrcweir { 790cdf0e10cSrcweir hr= SafeArrayGetLBound( val, 1, &lbound1); 791cdf0e10cSrcweir hr= SafeArrayGetUBound( val, 1, &ubound1); 792cdf0e10cSrcweir length1= ubound1 - lbound1 +1; 793cdf0e10cSrcweir 794cdf0e10cSrcweir hr= SafeArrayGetLBound( val, 2, &lbound2); 795cdf0e10cSrcweir hr= SafeArrayGetUBound( val, 2, &ubound2); 796cdf0e10cSrcweir length2= ubound2 - lbound2 + 1; 797cdf0e10cSrcweir char tmpBuf[1024]; 798cdf0e10cSrcweir tmpBuf[0]=0; 799cdf0e10cSrcweir long index[2]; 800cdf0e10cSrcweir for( long i= 0; i< length2; i++) 801cdf0e10cSrcweir { 802cdf0e10cSrcweir for( long j= 0; j<length1; j++) 803cdf0e10cSrcweir { 804cdf0e10cSrcweir index[0]= j; 805cdf0e10cSrcweir index[1]= i; 806cdf0e10cSrcweir long longVal; 807cdf0e10cSrcweir CComVariant var; 808cdf0e10cSrcweir switch( type) 809cdf0e10cSrcweir { 810cdf0e10cSrcweir case VT_I4: 811cdf0e10cSrcweir hr= SafeArrayGetElement( val, index, &longVal); 812cdf0e10cSrcweir sprintf( tmpBuf, "(%d,%d): %d\n", index[1], index[0], longVal); 813cdf0e10cSrcweir break; 814cdf0e10cSrcweir case VT_UI1: 815cdf0e10cSrcweir hr= SafeArrayGetElement( val, index, &longVal); 816cdf0e10cSrcweir sprintf( tmpBuf, "(%d,%d): %d\n", index[1], index[0], (unsigned char)longVal); 817cdf0e10cSrcweir break; 818cdf0e10cSrcweir case VT_VARIANT: 819cdf0e10cSrcweir hr= SafeArrayGetElement( val, index, &var ); 820cdf0e10cSrcweir sprintf( tmpBuf, "(%d,%d): %d (vartype %d)\n", index[1], index[0], var.byref, var.vt); 821cdf0e10cSrcweir break; 822cdf0e10cSrcweir } 823cdf0e10cSrcweir strcat( buff,tmpBuf); 824cdf0e10cSrcweir } 825cdf0e10cSrcweir 826cdf0e10cSrcweir } 827cdf0e10cSrcweir 828cdf0e10cSrcweir 829cdf0e10cSrcweir } 830cdf0e10cSrcweir else if( dims == 3 ) 831cdf0e10cSrcweir { 832cdf0e10cSrcweir hr= SafeArrayGetLBound( val, 1, &lbound1); 833cdf0e10cSrcweir hr= SafeArrayGetUBound( val, 1, &ubound1); 834cdf0e10cSrcweir length1= ubound1 - lbound1 +1; 835cdf0e10cSrcweir 836cdf0e10cSrcweir hr= SafeArrayGetLBound( val, 2, &lbound2); 837cdf0e10cSrcweir hr= SafeArrayGetUBound( val, 2, &ubound2); 838cdf0e10cSrcweir length2= ubound2 - lbound2 + 1; 839cdf0e10cSrcweir 840cdf0e10cSrcweir hr= SafeArrayGetLBound( val, 3, &lbound3); 841cdf0e10cSrcweir hr= SafeArrayGetUBound( val, 3, &ubound3); 842cdf0e10cSrcweir length3= ubound3 - lbound3 +1; 843cdf0e10cSrcweir char tmpBuf[1024]; 844cdf0e10cSrcweir tmpBuf[0]=0; 845cdf0e10cSrcweir long index[3]; 846cdf0e10cSrcweir for( long i= 0; i< length3; i++) 847cdf0e10cSrcweir { 848cdf0e10cSrcweir for( long j= 0; j<length2; j++) 849cdf0e10cSrcweir { 850cdf0e10cSrcweir for( long k= 0; k<length1; k++) 851cdf0e10cSrcweir { 852cdf0e10cSrcweir index[0]= k; 853cdf0e10cSrcweir index[1]= j; 854cdf0e10cSrcweir index[2]= i; 855cdf0e10cSrcweir long longVal; 856cdf0e10cSrcweir CComVariant var; 857cdf0e10cSrcweir switch( type) 858cdf0e10cSrcweir { 859cdf0e10cSrcweir case VT_I4: 860cdf0e10cSrcweir hr= SafeArrayGetElement( val, index, &longVal); 861cdf0e10cSrcweir sprintf( tmpBuf, "(%d,%d,%d): %d\n", index[2], index[1], index[0], longVal); 862cdf0e10cSrcweir break; 863cdf0e10cSrcweir case VT_UI1: 864cdf0e10cSrcweir hr= SafeArrayGetElement( val, index, &longVal); 865cdf0e10cSrcweir sprintf( tmpBuf, "(%d,%d,%d): %d\n", index[2], index[1], index[0], (unsigned char)longVal); 866cdf0e10cSrcweir break; 867cdf0e10cSrcweir 868cdf0e10cSrcweir case VT_VARIANT: 869cdf0e10cSrcweir hr= SafeArrayGetElement( val, index, &var ); 870cdf0e10cSrcweir sprintf( tmpBuf, "(%d,%d,%d): %d (vartype %d)\n", index[2], index[1], index[0], var.byref, var.vt); 871cdf0e10cSrcweir break; 872cdf0e10cSrcweir } 873cdf0e10cSrcweir strcat( buff,tmpBuf); 874cdf0e10cSrcweir } 875cdf0e10cSrcweir } 876cdf0e10cSrcweir 877cdf0e10cSrcweir } 878cdf0e10cSrcweir 879cdf0e10cSrcweir } 880cdf0e10cSrcweir 881cdf0e10cSrcweir MessageBox( NULL, A2T( buff), _T("AxTestControl.Basic"), MB_OK); 882cdf0e10cSrcweir 883cdf0e10cSrcweir 884cdf0e10cSrcweir } 885cdf0e10cSrcweir 886cdf0e10cSrcweir 887cdf0e10cSrcweir 888cdf0e10cSrcweir 889cdf0e10cSrcweir STDMETHODIMP CBasic::outMore(long* val1, long* val2) 890cdf0e10cSrcweir { 891cdf0e10cSrcweir // TODO: Add your implementation code here 892cdf0e10cSrcweir *val1= 111; 893cdf0e10cSrcweir *val2= 112; 894cdf0e10cSrcweir return S_OK; 895cdf0e10cSrcweir } 896cdf0e10cSrcweir // If an optional parameter was not provided then the respective member will 897cdf0e10cSrcweir // not be set 898cdf0e10cSrcweir STDMETHODIMP CBasic::optional1(/*[in]*/ long val1, /*[in, optional]*/ VARIANT* val2) 899cdf0e10cSrcweir { 900cdf0e10cSrcweir m_long = val1; 901cdf0e10cSrcweir if (val2->vt != VT_ERROR) 902cdf0e10cSrcweir m_var1 = *val2; 903cdf0e10cSrcweir return S_OK; 904cdf0e10cSrcweir } 905cdf0e10cSrcweir 906cdf0e10cSrcweir STDMETHODIMP CBasic::optional2(/*[out]*/ long* val1,/*[out, optional]*/ VARIANT* val2) 907cdf0e10cSrcweir { 908cdf0e10cSrcweir HRESULT hr = S_OK; 909cdf0e10cSrcweir *val1 = m_long; 910cdf0e10cSrcweir 911cdf0e10cSrcweir if (val2->vt != VT_ERROR) 912cdf0e10cSrcweir hr = VariantCopy(val2, & m_var1); 913cdf0e10cSrcweir return hr; 914cdf0e10cSrcweir } 915cdf0e10cSrcweir 916cdf0e10cSrcweir STDMETHODIMP CBasic::optional3(/*[in, optional]*/ VARIANT* val1,/*[in, optional]*/ VARIANT* val2) 917cdf0e10cSrcweir { 918cdf0e10cSrcweir //if (val1->vt != VT_ERROR) 919cdf0e10cSrcweir m_var1 = *val1; 920cdf0e10cSrcweir 921cdf0e10cSrcweir //if (val2->vt != VT_ERROR) 922cdf0e10cSrcweir m_var2 = *val2; 923cdf0e10cSrcweir return S_OK; 924cdf0e10cSrcweir } 925cdf0e10cSrcweir 926cdf0e10cSrcweir STDMETHODIMP CBasic::optional4(/*[in, out, optional]*/ VARIANT* val1, 927cdf0e10cSrcweir /*[in, out, optional]*/ VARIANT* val2) 928cdf0e10cSrcweir { 929cdf0e10cSrcweir HRESULT hr = S_OK; 930cdf0e10cSrcweir //return the previously set in values 931cdf0e10cSrcweir if (val1->vt != VT_ERROR) 932cdf0e10cSrcweir { 933cdf0e10cSrcweir CComVariant var1(*val1); 934cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val1, & m_var1))) 935cdf0e10cSrcweir return hr; 936cdf0e10cSrcweir m_var1 = var1; 937cdf0e10cSrcweir } 938cdf0e10cSrcweir if (val2->vt != VT_ERROR) 939cdf0e10cSrcweir { 940cdf0e10cSrcweir CComVariant var2(*val2); 941cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val2, & m_var2))) 942cdf0e10cSrcweir return hr; 943cdf0e10cSrcweir m_var2 = var2; 944cdf0e10cSrcweir } 945cdf0e10cSrcweir return hr; 946cdf0e10cSrcweir } 947cdf0e10cSrcweir 948cdf0e10cSrcweir STDMETHODIMP CBasic::optional5(/*[out, optional]*/ VARIANT* val1, 949cdf0e10cSrcweir /*[out, optional]*/ VARIANT* val2) 950cdf0e10cSrcweir { 951cdf0e10cSrcweir HRESULT hr = S_OK; 952cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val1, &m_var1))) 953cdf0e10cSrcweir return hr; 954cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val2, &m_var2))) 955cdf0e10cSrcweir return hr; 956cdf0e10cSrcweir return hr; 957cdf0e10cSrcweir } 958cdf0e10cSrcweir 959cdf0e10cSrcweir STDMETHODIMP CBasic::defaultvalue1(/*[in, defaultvalue(10)]*/ long val1, 960cdf0e10cSrcweir /*[in, defaultvalue(3.14)]*/ double* val2, 961cdf0e10cSrcweir // /*[in, defaultvalue(10)]*/ VARIANT val3, 962cdf0e10cSrcweir /*[in, defaultvalue(100)]*/ VARIANT* val4) 963cdf0e10cSrcweir { 964cdf0e10cSrcweir m_long = val1; 965cdf0e10cSrcweir m_double = *val2; 966cdf0e10cSrcweir // m_var1 = val3; 967cdf0e10cSrcweir m_var2 = *val4; 968cdf0e10cSrcweir return S_OK; 969cdf0e10cSrcweir } 970cdf0e10cSrcweir STDMETHODIMP CBasic::defaultvalue2(/*[in, out, defaultvalue(10)]*/ long* val1, 971cdf0e10cSrcweir /*[in, out, defaultvalue(3.14)]*/ double* val2, 972cdf0e10cSrcweir // /*[in, out, defaultvalue(10)]*/ VARIANT* val3, 973cdf0e10cSrcweir /*[in, out, defaultvalue(100)]*/ VARIANT* val4) 974cdf0e10cSrcweir { 975cdf0e10cSrcweir HRESULT hr = S_OK; 976cdf0e10cSrcweir long aLong = *val1; 977cdf0e10cSrcweir double aDouble = *val2; 978cdf0e10cSrcweir // CComVariant var1(*val3); 979cdf0e10cSrcweir CComVariant var2(*val4); 980cdf0e10cSrcweir *val1 = m_long; 981cdf0e10cSrcweir *val2 = m_double; 982cdf0e10cSrcweir //if (FAILED(hr = VariantCopy(val3, &m_var1))) 983cdf0e10cSrcweir // return hr; 984cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val4, &m_var2))) 985cdf0e10cSrcweir return hr; 986cdf0e10cSrcweir m_long = aLong; 987cdf0e10cSrcweir m_double = aDouble; 988cdf0e10cSrcweir // m_var1 = var1; 989cdf0e10cSrcweir m_var2 = var2; 990cdf0e10cSrcweir return hr; 991cdf0e10cSrcweir } 992cdf0e10cSrcweir /* val2 contains the variable argument list. If no such arguments are supplied 993cdf0e10cSrcweir then the safearray is invalid. SafeArrayCopy then returns E_INVALIDARG 994cdf0e10cSrcweir */ 995cdf0e10cSrcweir STDMETHODIMP CBasic::varargfunc1(/*[in]*/ long val1,/*[in]*/ LPSAFEARRAY val2) 996cdf0e10cSrcweir { 997cdf0e10cSrcweir m_long = val1; 998cdf0e10cSrcweir 999cdf0e10cSrcweir HRESULT hr = S_OK; 1000cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_safearray))) 1001cdf0e10cSrcweir return hr; 1002cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val2, & m_safearray))) 1003cdf0e10cSrcweir { 1004cdf0e10cSrcweir if (hr != E_INVALIDARG) 1005cdf0e10cSrcweir return hr; 1006cdf0e10cSrcweir } 1007cdf0e10cSrcweir return S_OK; 1008cdf0e10cSrcweir } 1009cdf0e10cSrcweir 1010cdf0e10cSrcweir STDMETHODIMP CBasic::varargfunc2(/*[out]*/ long* val1, /*[out]*/ SAFEARRAY ** val2) 1011cdf0e10cSrcweir { 1012cdf0e10cSrcweir *val1 = m_long; 1013cdf0e10cSrcweir HRESULT hr = SafeArrayCopy(m_safearray, val2); 1014cdf0e10cSrcweir return hr; 1015cdf0e10cSrcweir } 1016cdf0e10cSrcweir 1017cdf0e10cSrcweir STDMETHODIMP CBasic::inSequenceByteDim2(LPSAFEARRAY val) 1018cdf0e10cSrcweir { 1019cdf0e10cSrcweir HRESULT hr = S_OK; 1020cdf0e10cSrcweir if (FAILED(hr = SafeArrayDestroy(m_arByteDim2))) 1021cdf0e10cSrcweir return hr; 1022cdf0e10cSrcweir if (FAILED(hr = SafeArrayCopy(val, & m_arByteDim2))) 1023cdf0e10cSrcweir return hr; 1024cdf0e10cSrcweir return hr; 1025cdf0e10cSrcweir } 1026cdf0e10cSrcweir 1027cdf0e10cSrcweir 1028cdf0e10cSrcweir STDMETHODIMP CBasic::inCurrency(CY val) 1029cdf0e10cSrcweir { 1030cdf0e10cSrcweir m_cy = val; 1031cdf0e10cSrcweir return S_OK; 1032cdf0e10cSrcweir } 1033cdf0e10cSrcweir 1034cdf0e10cSrcweir STDMETHODIMP CBasic::outCurrency(CY* val) 1035cdf0e10cSrcweir { 1036cdf0e10cSrcweir *val = m_cy; 1037cdf0e10cSrcweir return S_OK; 1038cdf0e10cSrcweir } 1039cdf0e10cSrcweir 1040cdf0e10cSrcweir STDMETHODIMP CBasic::inoutCurrency(CY* val) 1041cdf0e10cSrcweir { 1042cdf0e10cSrcweir CY tmp = *val; 1043cdf0e10cSrcweir *val = m_cy; 1044cdf0e10cSrcweir m_cy = tmp; 1045cdf0e10cSrcweir return S_OK; 1046cdf0e10cSrcweir } 1047cdf0e10cSrcweir 1048cdf0e10cSrcweir STDMETHODIMP CBasic::inDate(DATE val) 1049cdf0e10cSrcweir { 1050cdf0e10cSrcweir m_date = val; 1051cdf0e10cSrcweir return S_OK; 1052cdf0e10cSrcweir } 1053cdf0e10cSrcweir 1054cdf0e10cSrcweir STDMETHODIMP CBasic::outDate(DATE* val) 1055cdf0e10cSrcweir { 1056cdf0e10cSrcweir *val = m_date; 1057cdf0e10cSrcweir return S_OK; 1058cdf0e10cSrcweir } 1059cdf0e10cSrcweir 1060cdf0e10cSrcweir STDMETHODIMP CBasic::inoutDate(DATE* val) 1061cdf0e10cSrcweir { 1062cdf0e10cSrcweir DATE tmp = *val; 1063cdf0e10cSrcweir *val = m_date; 1064cdf0e10cSrcweir m_date = tmp; 1065cdf0e10cSrcweir return S_OK; 1066cdf0e10cSrcweir } 1067cdf0e10cSrcweir 1068cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpCurrency(CY* pVal) 1069cdf0e10cSrcweir { 1070cdf0e10cSrcweir *pVal = m_cy; 1071cdf0e10cSrcweir return S_OK; 1072cdf0e10cSrcweir } 1073cdf0e10cSrcweir 1074cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpCurrency(CY newVal) 1075cdf0e10cSrcweir { 1076cdf0e10cSrcweir m_cy = newVal; 1077cdf0e10cSrcweir return S_OK; 1078cdf0e10cSrcweir } 1079cdf0e10cSrcweir 1080cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpDate(DATE* pVal) 1081cdf0e10cSrcweir { 1082cdf0e10cSrcweir *pVal = m_date; 1083cdf0e10cSrcweir return S_OK; 1084cdf0e10cSrcweir } 1085cdf0e10cSrcweir 1086cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpDate(DATE newVal) 1087cdf0e10cSrcweir { 1088cdf0e10cSrcweir m_date = newVal; 1089cdf0e10cSrcweir return S_OK; 1090cdf0e10cSrcweir } 1091cdf0e10cSrcweir 1092cdf0e10cSrcweir //VT_I4 DECIMAL_NEG //tagVARIANT DISPATCH_PROPERTYPUT 1093cdf0e10cSrcweir STDMETHODIMP CBasic::inDecimal(DECIMAL val) 1094cdf0e10cSrcweir { 1095cdf0e10cSrcweir m_decimal = val; 1096cdf0e10cSrcweir return S_OK; 1097cdf0e10cSrcweir } 1098cdf0e10cSrcweir 1099cdf0e10cSrcweir STDMETHODIMP CBasic::outDecimal(DECIMAL* val) 1100cdf0e10cSrcweir { 1101cdf0e10cSrcweir * val = m_decimal; 1102cdf0e10cSrcweir return S_OK; 1103cdf0e10cSrcweir } 1104cdf0e10cSrcweir 1105cdf0e10cSrcweir STDMETHODIMP CBasic::inoutDecimal(DECIMAL* val) 1106cdf0e10cSrcweir { 1107cdf0e10cSrcweir DECIMAL tmp; 1108cdf0e10cSrcweir tmp = * val; 1109cdf0e10cSrcweir * val = m_decimal; 1110cdf0e10cSrcweir m_decimal = tmp; 1111cdf0e10cSrcweir return S_OK; 1112cdf0e10cSrcweir } 1113cdf0e10cSrcweir 1114cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpDecimal(DECIMAL* pVal) 1115cdf0e10cSrcweir { 1116cdf0e10cSrcweir * pVal = m_decimal; 1117cdf0e10cSrcweir return S_OK; 1118cdf0e10cSrcweir } 1119cdf0e10cSrcweir 1120cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpDecimal(DECIMAL newVal) 1121cdf0e10cSrcweir { 1122cdf0e10cSrcweir m_decimal = newVal; 1123cdf0e10cSrcweir return S_OK; 1124cdf0e10cSrcweir } 1125cdf0e10cSrcweir 1126cdf0e10cSrcweir STDMETHODIMP CBasic::inSCode(SCODE val) 1127cdf0e10cSrcweir { 1128cdf0e10cSrcweir m_scode = val; 1129cdf0e10cSrcweir return S_OK; 1130cdf0e10cSrcweir } 1131cdf0e10cSrcweir 1132cdf0e10cSrcweir STDMETHODIMP CBasic::outScode(SCODE* val) 1133cdf0e10cSrcweir { 1134cdf0e10cSrcweir * val = m_scode; 1135cdf0e10cSrcweir return S_OK; 1136cdf0e10cSrcweir } 1137cdf0e10cSrcweir 1138cdf0e10cSrcweir STDMETHODIMP CBasic::inoutSCode(SCODE* val) 1139cdf0e10cSrcweir { 1140cdf0e10cSrcweir SCODE tmp = *val; 1141cdf0e10cSrcweir * val = m_scode; 1142cdf0e10cSrcweir m_scode = tmp; 1143cdf0e10cSrcweir return S_OK; 1144cdf0e10cSrcweir } 1145cdf0e10cSrcweir 1146cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpSCode(SCODE* pVal) 1147cdf0e10cSrcweir { 1148cdf0e10cSrcweir * pVal = m_scode; 1149cdf0e10cSrcweir return S_OK; 1150cdf0e10cSrcweir } 1151cdf0e10cSrcweir 1152cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpSCode(SCODE newVal) 1153cdf0e10cSrcweir { 1154cdf0e10cSrcweir m_scode = newVal; 1155cdf0e10cSrcweir return S_OK; 1156cdf0e10cSrcweir } 1157cdf0e10cSrcweir 1158cdf0e10cSrcweir STDMETHODIMP CBasic::inrefLong(LONG* val) 1159cdf0e10cSrcweir { 1160cdf0e10cSrcweir m_long = * val; 1161cdf0e10cSrcweir return S_OK; 1162cdf0e10cSrcweir } 1163cdf0e10cSrcweir 1164cdf0e10cSrcweir STDMETHODIMP CBasic::inrefVariant(VARIANT* val) 1165cdf0e10cSrcweir { 1166cdf0e10cSrcweir HRESULT hr = S_OK; 1167cdf0e10cSrcweir if (FAILED(hr = VariantCopy( & m_var1, val))) 1168cdf0e10cSrcweir return hr; 1169cdf0e10cSrcweir return S_OK; 1170cdf0e10cSrcweir } 1171cdf0e10cSrcweir 1172cdf0e10cSrcweir STDMETHODIMP CBasic::inrefDecimal(DECIMAL* val) 1173cdf0e10cSrcweir { 1174cdf0e10cSrcweir m_decimal = * val; 1175cdf0e10cSrcweir return S_OK; 1176cdf0e10cSrcweir } 1177cdf0e10cSrcweir 1178cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpRefLong(long* pVal) 1179cdf0e10cSrcweir { 1180cdf0e10cSrcweir *pVal = m_long; 1181cdf0e10cSrcweir return S_OK; 1182cdf0e10cSrcweir } 1183cdf0e10cSrcweir 1184cdf0e10cSrcweir STDMETHODIMP CBasic::putref_prpRefLong(long* newVal) 1185cdf0e10cSrcweir { 1186cdf0e10cSrcweir m_long = * newVal; 1187cdf0e10cSrcweir return S_OK; 1188cdf0e10cSrcweir } 1189cdf0e10cSrcweir 1190cdf0e10cSrcweir STDMETHODIMP CBasic::get_prprefVariant(VARIANT* pVal) 1191cdf0e10cSrcweir { 1192cdf0e10cSrcweir HRESULT hr = S_OK; 1193cdf0e10cSrcweir hr = VariantCopy(pVal, & m_var1); 1194cdf0e10cSrcweir return hr; 1195cdf0e10cSrcweir } 1196cdf0e10cSrcweir 1197cdf0e10cSrcweir STDMETHODIMP CBasic::putref_prprefVariant(VARIANT* newVal) 1198cdf0e10cSrcweir { 1199cdf0e10cSrcweir m_var1 = * newVal; 1200cdf0e10cSrcweir return S_OK; 1201cdf0e10cSrcweir } 1202cdf0e10cSrcweir 1203cdf0e10cSrcweir STDMETHODIMP CBasic::get_prprefDecimal(DECIMAL* pVal) 1204cdf0e10cSrcweir { 1205cdf0e10cSrcweir * pVal = m_decimal; 1206cdf0e10cSrcweir return S_OK; 1207cdf0e10cSrcweir } 1208cdf0e10cSrcweir 1209cdf0e10cSrcweir STDMETHODIMP CBasic::putref_prprefDecimal(DECIMAL* newVal) 1210cdf0e10cSrcweir { 1211cdf0e10cSrcweir m_decimal = *newVal; 1212cdf0e10cSrcweir return S_OK; 1213cdf0e10cSrcweir } 1214cdf0e10cSrcweir 1215cdf0e10cSrcweir 1216cdf0e10cSrcweir STDMETHODIMP CBasic::optional6(VARIANT* val1, VARIANT* val2, VARIANT* val3, VARIANT* val4) 1217cdf0e10cSrcweir { 1218cdf0e10cSrcweir HRESULT hr = S_OK; 1219cdf0e10cSrcweir if (FAILED(hr = m_var1.Copy(val1))) 1220cdf0e10cSrcweir return hr; 1221cdf0e10cSrcweir if (FAILED(hr = m_var2.Copy(val2))) 1222cdf0e10cSrcweir return hr; 1223cdf0e10cSrcweir if (FAILED(hr = m_var3.Copy(val3))) 1224cdf0e10cSrcweir return hr; 1225cdf0e10cSrcweir if (FAILED(hr = m_var4.Copy(val4))) 1226cdf0e10cSrcweir return hr; 1227cdf0e10cSrcweir return S_OK; 1228cdf0e10cSrcweir } 1229cdf0e10cSrcweir 1230cdf0e10cSrcweir STDMETHODIMP CBasic::optional7(VARIANT* val1, VARIANT* val2, VARIANT* val3, VARIANT* val4) 1231cdf0e10cSrcweir { 1232cdf0e10cSrcweir HRESULT hr = S_OK; 1233cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val1, & m_var1))) 1234cdf0e10cSrcweir return hr; 1235cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val2, & m_var2))) 1236cdf0e10cSrcweir return hr; 1237cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val3, & m_var3))) 1238cdf0e10cSrcweir return hr; 1239cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val4, & m_var4))) 1240cdf0e10cSrcweir return hr; 1241cdf0e10cSrcweir 1242cdf0e10cSrcweir return S_OK; 1243cdf0e10cSrcweir } 1244cdf0e10cSrcweir 1245cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpMultiArg1(VARIANT* val1, VARIANT* val2, VARIANT* pVal) 1246cdf0e10cSrcweir { 1247cdf0e10cSrcweir HRESULT hr = S_OK; 1248cdf0e10cSrcweir CComVariant tmp1(*val1); 1249cdf0e10cSrcweir CComVariant tmp2(*val2); 1250cdf0e10cSrcweir 1251cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val1, & m_var1))) 1252cdf0e10cSrcweir return hr; 1253cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val2, & m_var2))) 1254cdf0e10cSrcweir return hr; 1255cdf0e10cSrcweir m_var1 = tmp1; 1256cdf0e10cSrcweir m_var2 = tmp2; 1257cdf0e10cSrcweir if (FAILED(hr = VariantCopy(pVal, & m_var3))) 1258cdf0e10cSrcweir return hr; 1259cdf0e10cSrcweir return S_OK; 1260cdf0e10cSrcweir } 1261cdf0e10cSrcweir 1262cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpMultiArg1(VARIANT* val1, VARIANT* val2, VARIANT* newVal) 1263cdf0e10cSrcweir { 1264cdf0e10cSrcweir HRESULT hr = S_OK; 1265cdf0e10cSrcweir CComVariant tmp1( * val1); 1266cdf0e10cSrcweir CComVariant tmp2( * val2); 1267cdf0e10cSrcweir 1268cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val1, & m_var1))) 1269cdf0e10cSrcweir return hr; 1270cdf0e10cSrcweir if (FAILED(hr = VariantCopy(val2, & m_var2))) 1271cdf0e10cSrcweir return hr; 1272cdf0e10cSrcweir m_var1 = tmp1; 1273cdf0e10cSrcweir m_var2 = tmp2; 1274cdf0e10cSrcweir 1275cdf0e10cSrcweir m_var3 = *newVal; 1276cdf0e10cSrcweir return S_OK; 1277cdf0e10cSrcweir } 1278cdf0e10cSrcweir 1279cdf0e10cSrcweir // tagVARIANT DISPATCH_PROPERTYPUT DISPID_PROPERTYPUT VARIANTARG LOCALE_USER_DEFAULT 1280cdf0e10cSrcweir 1281cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpMultiArg2(VARIANT val1, VARIANT* pVal) 1282cdf0e10cSrcweir { 1283cdf0e10cSrcweir HRESULT hr = S_OK; 1284cdf0e10cSrcweir m_var1 = val1; 1285cdf0e10cSrcweir 1286cdf0e10cSrcweir if (FAILED(hr = VariantCopy(pVal, & m_var2))) 1287cdf0e10cSrcweir return hr; 1288cdf0e10cSrcweir return S_OK; 1289cdf0e10cSrcweir } 1290cdf0e10cSrcweir 1291cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpMultiArg2(VARIANT val1, VARIANT newVal) 1292cdf0e10cSrcweir { 1293cdf0e10cSrcweir m_var1 = val1; 1294cdf0e10cSrcweir m_var2 = newVal; 1295cdf0e10cSrcweir return S_OK; 1296cdf0e10cSrcweir } 1297cdf0e10cSrcweir 1298cdf0e10cSrcweir // returns the values set by prpMultiArg2 1299cdf0e10cSrcweir STDMETHODIMP CBasic::prpMultiArg2GetValues(VARIANT* val1, VARIANT* valProperty) 1300cdf0e10cSrcweir { 1301cdf0e10cSrcweir HRESULT hr = S_OK; 1302cdf0e10cSrcweir if (FAILED(VariantCopy(val1, & m_var1))) 1303cdf0e10cSrcweir return hr; 1304cdf0e10cSrcweir if (FAILED(VariantCopy(valProperty, & m_var2))) 1305cdf0e10cSrcweir return hr; 1306cdf0e10cSrcweir return S_OK; 1307cdf0e10cSrcweir } 1308cdf0e10cSrcweir 1309cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpMultiArg3(LONG* val1, LONG* pVal) 1310cdf0e10cSrcweir { 1311cdf0e10cSrcweir long aLong = *val1; 1312cdf0e10cSrcweir *val1 = m_long; 1313cdf0e10cSrcweir m_long = aLong; 1314cdf0e10cSrcweir 1315cdf0e10cSrcweir * pVal = m_long2; 1316cdf0e10cSrcweir return S_OK; 1317cdf0e10cSrcweir } 1318cdf0e10cSrcweir 1319cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpMultiArg3(LONG* val1, LONG newVal) 1320cdf0e10cSrcweir { 1321cdf0e10cSrcweir long aLong = *val1; 1322cdf0e10cSrcweir *val1 = m_long; 1323cdf0e10cSrcweir m_long = aLong; 1324cdf0e10cSrcweir 1325cdf0e10cSrcweir m_long2 = newVal; 1326cdf0e10cSrcweir return S_OK; 1327cdf0e10cSrcweir } 1328cdf0e10cSrcweir 1329cdf0e10cSrcweir STDMETHODIMP CBasic::inUnknown(IUnknown* val) 1330cdf0e10cSrcweir { 1331cdf0e10cSrcweir m_unknown = val; 1332cdf0e10cSrcweir 1333cdf0e10cSrcweir return S_OK; 1334cdf0e10cSrcweir } 1335cdf0e10cSrcweir 1336cdf0e10cSrcweir STDMETHODIMP CBasic::outUnknown(IUnknown** val) 1337cdf0e10cSrcweir { 1338cdf0e10cSrcweir m_unknown.CopyTo(val); 1339cdf0e10cSrcweir return S_OK; 1340cdf0e10cSrcweir } 1341cdf0e10cSrcweir 1342cdf0e10cSrcweir STDMETHODIMP CBasic::inoutUnknown(IUnknown** val) 1343cdf0e10cSrcweir { 1344cdf0e10cSrcweir CComPtr<IUnknown> tmp = *val; 1345cdf0e10cSrcweir m_unknown.CopyTo(val); 1346cdf0e10cSrcweir m_unknown = tmp; 1347cdf0e10cSrcweir return S_OK; 1348cdf0e10cSrcweir } 1349cdf0e10cSrcweir 1350cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpUnknown(IUnknown** pVal) 1351cdf0e10cSrcweir { 1352cdf0e10cSrcweir m_prpUnknown.CopyTo(pVal); 1353cdf0e10cSrcweir return S_OK; 1354cdf0e10cSrcweir } 1355cdf0e10cSrcweir 1356cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpUnknown(IUnknown* newVal) 1357cdf0e10cSrcweir { 1358cdf0e10cSrcweir m_prpUnknown = newVal; 1359cdf0e10cSrcweir return S_OK; 1360cdf0e10cSrcweir } 1361