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
10*520fa265SAndrew Rist  *
11*520fa265SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*520fa265SAndrew Rist  *
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.
19*520fa265SAndrew Rist  *
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
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 
~CBasic()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 }
inBool(VARIANT_BOOL val)55cdf0e10cSrcweir STDMETHODIMP CBasic::inBool(VARIANT_BOOL val)
56cdf0e10cSrcweir {
57cdf0e10cSrcweir 	m_bool = val;
58cdf0e10cSrcweir 	return S_OK;
59cdf0e10cSrcweir }
inByte(unsigned char val)60cdf0e10cSrcweir STDMETHODIMP CBasic::inByte(unsigned char val)
61cdf0e10cSrcweir {
62cdf0e10cSrcweir 	m_byte = val;
63cdf0e10cSrcweir 	return S_OK;
64cdf0e10cSrcweir }
65cdf0e10cSrcweir 
inShort(short val)66cdf0e10cSrcweir STDMETHODIMP CBasic::inShort(short val)
67cdf0e10cSrcweir {
68cdf0e10cSrcweir 	m_short = val;
69cdf0e10cSrcweir 	return S_OK;
70cdf0e10cSrcweir }
71cdf0e10cSrcweir 
inLong(long val)72cdf0e10cSrcweir STDMETHODIMP CBasic::inLong(long val)
73cdf0e10cSrcweir {
74cdf0e10cSrcweir 	m_long = val;
75cdf0e10cSrcweir 	return S_OK;
76cdf0e10cSrcweir }
77cdf0e10cSrcweir 
inString(BSTR val)78cdf0e10cSrcweir STDMETHODIMP CBasic::inString(BSTR val)
79cdf0e10cSrcweir {
80cdf0e10cSrcweir 	m_bstr = val;
81cdf0e10cSrcweir 	return S_OK;
82cdf0e10cSrcweir }
83cdf0e10cSrcweir 
inFloat(float val)84cdf0e10cSrcweir STDMETHODIMP CBasic::inFloat(float val)
85cdf0e10cSrcweir {
86cdf0e10cSrcweir 	m_float = val;
87cdf0e10cSrcweir 	return S_OK;
88cdf0e10cSrcweir }
89cdf0e10cSrcweir 
inDouble(double val)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 
inVariant(VARIANT val)100cdf0e10cSrcweir STDMETHODIMP CBasic::inVariant(VARIANT val)
101cdf0e10cSrcweir {
102cdf0e10cSrcweir 	m_var1 = val;
103cdf0e10cSrcweir 	return S_OK;
104cdf0e10cSrcweir }
105cdf0e10cSrcweir 
inArray(LPSAFEARRAY val)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 
inObject(IDispatch * val)116cdf0e10cSrcweir STDMETHODIMP CBasic::inObject(IDispatch *val)
117cdf0e10cSrcweir {
118cdf0e10cSrcweir 	m_obj = val;
119cdf0e10cSrcweir 	return S_OK;
120cdf0e10cSrcweir }
121cdf0e10cSrcweir 
inoutBool(VARIANT_BOOL * val)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 
inoutByte(unsigned char * val)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 
inoutShort(short * val)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 
inoutLong(long * val)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 
inoutString(BSTR * val)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 
inoutFloat(float * val)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 
inoutDouble(double * val)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 
inoutVariant(VARIANT * val)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 */
inoutArray(LPSAFEARRAY * val)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 
inoutObject(IDispatch ** val)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 
outBool(VARIANT_BOOL * val)220cdf0e10cSrcweir STDMETHODIMP CBasic::outBool(VARIANT_BOOL* val)
221cdf0e10cSrcweir {
222cdf0e10cSrcweir 	*val = m_bool;
223cdf0e10cSrcweir 	return S_OK;
224cdf0e10cSrcweir }
225cdf0e10cSrcweir 
outByte(unsigned char * val)226cdf0e10cSrcweir STDMETHODIMP CBasic::outByte(unsigned char *val)
227cdf0e10cSrcweir {
228cdf0e10cSrcweir 	*val= m_byte;
229cdf0e10cSrcweir 	return S_OK;
230cdf0e10cSrcweir }
231cdf0e10cSrcweir 
outShort(short * val)232cdf0e10cSrcweir STDMETHODIMP CBasic::outShort(short *val)
233cdf0e10cSrcweir {
234cdf0e10cSrcweir 	*val= m_short;
235cdf0e10cSrcweir 	return S_OK;
236cdf0e10cSrcweir }
237cdf0e10cSrcweir 
outLong(long * val)238cdf0e10cSrcweir STDMETHODIMP CBasic::outLong(long *val)
239cdf0e10cSrcweir {
240cdf0e10cSrcweir 	*val= m_long;
241cdf0e10cSrcweir 	return S_OK;
242cdf0e10cSrcweir }
243cdf0e10cSrcweir 
outString(BSTR * val)244cdf0e10cSrcweir STDMETHODIMP CBasic::outString(BSTR *val)
245cdf0e10cSrcweir {
246cdf0e10cSrcweir 	*val= SysAllocString(m_bstr);
247cdf0e10cSrcweir 	return S_OK;
248cdf0e10cSrcweir }
249cdf0e10cSrcweir 
outFloat(float * val)250cdf0e10cSrcweir STDMETHODIMP CBasic::outFloat(float *val)
251cdf0e10cSrcweir {
252cdf0e10cSrcweir 	*val= m_float;
253cdf0e10cSrcweir 	return S_OK;
254cdf0e10cSrcweir }
255cdf0e10cSrcweir 
outDouble(double * val)256cdf0e10cSrcweir STDMETHODIMP CBasic::outDouble(double *val)
257cdf0e10cSrcweir {
258cdf0e10cSrcweir 	*val= m_double;
259cdf0e10cSrcweir 	return S_OK;
260cdf0e10cSrcweir }
261cdf0e10cSrcweir 
outVariant(VARIANT * val)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 
outArray(LPSAFEARRAY * val)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 
outObject(IDispatch ** val)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 
get_prpBool(VARIANT_BOOL * pVal)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 
put_prpBool(VARIANT_BOOL val)295cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpBool(VARIANT_BOOL val)
296cdf0e10cSrcweir {
297cdf0e10cSrcweir 	m_bool = val;
298cdf0e10cSrcweir 	return S_OK;
299cdf0e10cSrcweir }
300cdf0e10cSrcweir 
301cdf0e10cSrcweir 
get_prpByte(unsigned char * pVal)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 
put_prpByte(unsigned char newVal)310cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpByte(unsigned char newVal)
311cdf0e10cSrcweir {
312cdf0e10cSrcweir 	m_cPrpByte= newVal;
313cdf0e10cSrcweir 	return S_OK;
314cdf0e10cSrcweir }
315cdf0e10cSrcweir 
get_prpShort(short * pVal)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 
put_prpShort(short newVal)324cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpShort(short newVal)
325cdf0e10cSrcweir {
326cdf0e10cSrcweir 	m_nPrpShort= newVal;
327cdf0e10cSrcweir 	return S_OK;
328cdf0e10cSrcweir }
329cdf0e10cSrcweir 
get_prpLong(long * pVal)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 
put_prpLong(long newVal)338cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpLong(long newVal)
339cdf0e10cSrcweir {
340cdf0e10cSrcweir 	m_lPrpLong= newVal;
341cdf0e10cSrcweir 	return S_OK;
342cdf0e10cSrcweir }
343cdf0e10cSrcweir 
get_prpString(BSTR * pVal)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 
put_prpString(BSTR newVal)352cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpString(BSTR newVal)
353cdf0e10cSrcweir {
354cdf0e10cSrcweir 	m_bstrPrpString= newVal;
355cdf0e10cSrcweir 	return S_OK;
356cdf0e10cSrcweir }
357cdf0e10cSrcweir 
get_prpFloat(float * pVal)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 
put_prpFloat(float newVal)366cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpFloat(float newVal)
367cdf0e10cSrcweir {
368cdf0e10cSrcweir 	m_fPrpFloat= newVal;
369cdf0e10cSrcweir 	return S_OK;
370cdf0e10cSrcweir }
371cdf0e10cSrcweir 
get_prpDouble(double * pVal)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 
put_prpDouble(double newVal)380cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpDouble(double newVal)
381cdf0e10cSrcweir {
382cdf0e10cSrcweir 	m_dPrpDouble= newVal;
383cdf0e10cSrcweir 	return S_OK;
384cdf0e10cSrcweir }
385cdf0e10cSrcweir 
get_prpVariant(VARIANT * pVal)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 
put_prpVariant(VARIANT newVal)396cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpVariant(VARIANT newVal)
397cdf0e10cSrcweir {
398cdf0e10cSrcweir 	m_PropVariant= newVal;
399cdf0e10cSrcweir 	return S_OK;
400cdf0e10cSrcweir }
401cdf0e10cSrcweir 
get_prpArray(LPSAFEARRAY * pVal)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 
put_prpArray(LPSAFEARRAY newVal)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 
get_prpObject(IDispatch ** pVal)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 
put_prpObject(IDispatch * newVal)432cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpObject(IDispatch *newVal)
433cdf0e10cSrcweir {
434cdf0e10cSrcweir 	m_PrpObject= newVal;
435cdf0e10cSrcweir 	return S_OK;
436cdf0e10cSrcweir }
437cdf0e10cSrcweir 
mixed1(unsigned char * aChar,float * aFloat,VARIANT * aVar)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 
inSequenceLong(LPSAFEARRAY val)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 
inSequenceByte(LPSAFEARRAY val)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 
inSequenceShort(LPSAFEARRAY val)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 
inSequenceString(LPSAFEARRAY val)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 
inSequenceFloat(LPSAFEARRAY val)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 
inSequenceDouble(LPSAFEARRAY val)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 
inSequenceObject(LPSAFEARRAY val)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 
printArray(LPSAFEARRAY val,BSTR message,VARTYPE type)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 
outSequenceByte(LPSAFEARRAY * val)594cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceByte(LPSAFEARRAY* val)
595cdf0e10cSrcweir {
596cdf0e10cSrcweir 	HRESULT hr= S_OK;
597cdf0e10cSrcweir 	hr = SafeArrayCopy(m_arByte, val);
598cdf0e10cSrcweir 	return hr;
599cdf0e10cSrcweir }
600cdf0e10cSrcweir 
outSequenceShort(LPSAFEARRAY * val)601cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceShort(LPSAFEARRAY* val)
602cdf0e10cSrcweir {
603cdf0e10cSrcweir 	HRESULT hr= S_OK;
604cdf0e10cSrcweir 	hr = SafeArrayCopy(m_arShort, val);
605cdf0e10cSrcweir 	return hr;
606cdf0e10cSrcweir }
607cdf0e10cSrcweir 
outSequenceLong(LPSAFEARRAY * val)608cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceLong(LPSAFEARRAY* val)
609cdf0e10cSrcweir {
610cdf0e10cSrcweir 	HRESULT hr= S_OK;
611cdf0e10cSrcweir 	hr = SafeArrayCopy(m_arLong, val);
612cdf0e10cSrcweir 	return hr;
613cdf0e10cSrcweir }
614cdf0e10cSrcweir 
outSequenceString(LPSAFEARRAY * val)615cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceString(LPSAFEARRAY* val)
616cdf0e10cSrcweir {
617cdf0e10cSrcweir 	HRESULT hr= S_OK;
618cdf0e10cSrcweir 	hr = SafeArrayCopy(m_arString, val);
619cdf0e10cSrcweir 	return hr;
620cdf0e10cSrcweir }
621cdf0e10cSrcweir 
outSequenceFloat(LPSAFEARRAY * val)622cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceFloat(LPSAFEARRAY* val)
623cdf0e10cSrcweir {
624cdf0e10cSrcweir 	HRESULT hr= S_OK;
625cdf0e10cSrcweir 	hr = SafeArrayCopy(m_arFloat, val);
626cdf0e10cSrcweir 	return hr;
627cdf0e10cSrcweir }
628cdf0e10cSrcweir 
outSequenceDouble(LPSAFEARRAY * val)629cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceDouble(LPSAFEARRAY* val)
630cdf0e10cSrcweir {
631cdf0e10cSrcweir 	HRESULT hr= S_OK;
632cdf0e10cSrcweir 	hr = SafeArrayCopy(m_arDouble, val);
633cdf0e10cSrcweir 	return hr;
634cdf0e10cSrcweir }
635cdf0e10cSrcweir 
outSequenceObject(LPSAFEARRAY * val)636cdf0e10cSrcweir STDMETHODIMP CBasic::outSequenceObject(LPSAFEARRAY* val)
637cdf0e10cSrcweir {
638cdf0e10cSrcweir 	HRESULT hr = S_OK;
639cdf0e10cSrcweir 	hr = SafeArrayCopy(m_arObject, val);
640cdf0e10cSrcweir 	return S_OK;
641cdf0e10cSrcweir }
642cdf0e10cSrcweir 
inoutSequenceByte(LPSAFEARRAY * val)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 
inoutSequenceShort(LPSAFEARRAY * val)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 
inoutSequenceLong(LPSAFEARRAY * val)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 
inoutSequenceString(LPSAFEARRAY * val)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 
inoutSequenceFloat(LPSAFEARRAY * val)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 
inoutSequenceDouble(LPSAFEARRAY * val)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 
inoutSequenceObject(LPSAFEARRAY * val)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
inMulDimArrayLong(LPSAFEARRAY val)728cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayLong(LPSAFEARRAY val)
729cdf0e10cSrcweir {
730cdf0e10cSrcweir 	printMulArray( val, VT_I4);
731cdf0e10cSrcweir 	return S_OK;
732cdf0e10cSrcweir }
733cdf0e10cSrcweir // 2-dimensional Array
inMulDimArrayVariant(LPSAFEARRAY val)734cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayVariant(LPSAFEARRAY val)
735cdf0e10cSrcweir {
736cdf0e10cSrcweir 	printMulArray( val, VT_VARIANT);
737cdf0e10cSrcweir 	return S_OK;
738cdf0e10cSrcweir }
739cdf0e10cSrcweir // 3-dimensional Array
inMulDimArrayLong2(LPSAFEARRAY val)740cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayLong2(LPSAFEARRAY val)
741cdf0e10cSrcweir {
742cdf0e10cSrcweir 	printMulArray( val, VT_I4);
743cdf0e10cSrcweir 	return S_OK;
744cdf0e10cSrcweir }
745cdf0e10cSrcweir // 3-dimensional Array
inMulDimArrayVariant2(LPSAFEARRAY val)746cdf0e10cSrcweir STDMETHODIMP CBasic::inMulDimArrayVariant2(LPSAFEARRAY val)
747cdf0e10cSrcweir {
748cdf0e10cSrcweir 	return S_OK;
749cdf0e10cSrcweir }
750cdf0e10cSrcweir 
751cdf0e10cSrcweir 
inMulDimArrayByte(LPSAFEARRAY val)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
inMulDimArrayByte2(LPSAFEARRAY val)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
printMulArray(SAFEARRAY * val,VARTYPE type)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 
outMore(long * val1,long * val2)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
optional1(long val1,VARIANT * val2)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 
optional2(long * val1,VARIANT * val2)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 
optional3(VARIANT * val1,VARIANT * val2)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 
optional4(VARIANT * val1,VARIANT * val2)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 
optional5(VARIANT * val1,VARIANT * val2)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 
defaultvalue1(long val1,double * val2,VARIANT * val4)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 }
defaultvalue2(long * val1,double * val2,VARIANT * val4)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 */
varargfunc1(long val1,LPSAFEARRAY val2)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 
varargfunc2(long * val1,SAFEARRAY ** val2)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 
inSequenceByteDim2(LPSAFEARRAY val)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 
inCurrency(CY val)1028cdf0e10cSrcweir STDMETHODIMP CBasic::inCurrency(CY val)
1029cdf0e10cSrcweir {
1030cdf0e10cSrcweir 	m_cy = val;
1031cdf0e10cSrcweir 	return S_OK;
1032cdf0e10cSrcweir }
1033cdf0e10cSrcweir 
outCurrency(CY * val)1034cdf0e10cSrcweir STDMETHODIMP CBasic::outCurrency(CY* val)
1035cdf0e10cSrcweir {
1036cdf0e10cSrcweir 	*val = m_cy;
1037cdf0e10cSrcweir 	return S_OK;
1038cdf0e10cSrcweir }
1039cdf0e10cSrcweir 
inoutCurrency(CY * val)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 
inDate(DATE val)1048cdf0e10cSrcweir STDMETHODIMP CBasic::inDate(DATE val)
1049cdf0e10cSrcweir {
1050cdf0e10cSrcweir 	m_date = val;
1051cdf0e10cSrcweir 	return S_OK;
1052cdf0e10cSrcweir }
1053cdf0e10cSrcweir 
outDate(DATE * val)1054cdf0e10cSrcweir STDMETHODIMP CBasic::outDate(DATE* val)
1055cdf0e10cSrcweir {
1056cdf0e10cSrcweir 	*val = m_date;
1057cdf0e10cSrcweir 	return S_OK;
1058cdf0e10cSrcweir }
1059cdf0e10cSrcweir 
inoutDate(DATE * val)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 
get_prpCurrency(CY * pVal)1068cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpCurrency(CY* pVal)
1069cdf0e10cSrcweir {
1070cdf0e10cSrcweir 	*pVal = m_cy;
1071cdf0e10cSrcweir 	return S_OK;
1072cdf0e10cSrcweir }
1073cdf0e10cSrcweir 
put_prpCurrency(CY newVal)1074cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpCurrency(CY newVal)
1075cdf0e10cSrcweir {
1076cdf0e10cSrcweir 	m_cy = newVal;
1077cdf0e10cSrcweir 	return S_OK;
1078cdf0e10cSrcweir }
1079cdf0e10cSrcweir 
get_prpDate(DATE * pVal)1080cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpDate(DATE* pVal)
1081cdf0e10cSrcweir {
1082cdf0e10cSrcweir 	*pVal = m_date;
1083cdf0e10cSrcweir 	return S_OK;
1084cdf0e10cSrcweir }
1085cdf0e10cSrcweir 
put_prpDate(DATE newVal)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
inDecimal(DECIMAL val)1093cdf0e10cSrcweir STDMETHODIMP CBasic::inDecimal(DECIMAL val)
1094cdf0e10cSrcweir {
1095cdf0e10cSrcweir 	m_decimal = val;
1096cdf0e10cSrcweir 	return S_OK;
1097cdf0e10cSrcweir }
1098cdf0e10cSrcweir 
outDecimal(DECIMAL * val)1099cdf0e10cSrcweir STDMETHODIMP CBasic::outDecimal(DECIMAL* val)
1100cdf0e10cSrcweir {
1101cdf0e10cSrcweir 	* val = m_decimal;
1102cdf0e10cSrcweir 	return S_OK;
1103cdf0e10cSrcweir }
1104cdf0e10cSrcweir 
inoutDecimal(DECIMAL * val)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 
get_prpDecimal(DECIMAL * pVal)1114cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpDecimal(DECIMAL* pVal)
1115cdf0e10cSrcweir {
1116cdf0e10cSrcweir 	* pVal = m_decimal;
1117cdf0e10cSrcweir 	return S_OK;
1118cdf0e10cSrcweir }
1119cdf0e10cSrcweir 
put_prpDecimal(DECIMAL newVal)1120cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpDecimal(DECIMAL newVal)
1121cdf0e10cSrcweir {
1122cdf0e10cSrcweir 	m_decimal = newVal;
1123cdf0e10cSrcweir 	return S_OK;
1124cdf0e10cSrcweir }
1125cdf0e10cSrcweir 
inSCode(SCODE val)1126cdf0e10cSrcweir STDMETHODIMP CBasic::inSCode(SCODE val)
1127cdf0e10cSrcweir {
1128cdf0e10cSrcweir 	m_scode = val;
1129cdf0e10cSrcweir 	return S_OK;
1130cdf0e10cSrcweir }
1131cdf0e10cSrcweir 
outScode(SCODE * val)1132cdf0e10cSrcweir STDMETHODIMP CBasic::outScode(SCODE* val)
1133cdf0e10cSrcweir {
1134cdf0e10cSrcweir 	* val = m_scode;
1135cdf0e10cSrcweir 	return S_OK;
1136cdf0e10cSrcweir }
1137cdf0e10cSrcweir 
inoutSCode(SCODE * val)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 
get_prpSCode(SCODE * pVal)1146cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpSCode(SCODE* pVal)
1147cdf0e10cSrcweir {
1148cdf0e10cSrcweir 	* pVal = m_scode;
1149cdf0e10cSrcweir 	return S_OK;
1150cdf0e10cSrcweir }
1151cdf0e10cSrcweir 
put_prpSCode(SCODE newVal)1152cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpSCode(SCODE newVal)
1153cdf0e10cSrcweir {
1154cdf0e10cSrcweir 	m_scode = newVal;
1155cdf0e10cSrcweir 	return S_OK;
1156cdf0e10cSrcweir }
1157cdf0e10cSrcweir 
inrefLong(LONG * val)1158cdf0e10cSrcweir STDMETHODIMP CBasic::inrefLong(LONG* val)
1159cdf0e10cSrcweir {
1160cdf0e10cSrcweir 	m_long = * val;
1161cdf0e10cSrcweir 	return S_OK;
1162cdf0e10cSrcweir }
1163cdf0e10cSrcweir 
inrefVariant(VARIANT * val)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 
inrefDecimal(DECIMAL * val)1172cdf0e10cSrcweir STDMETHODIMP CBasic::inrefDecimal(DECIMAL* val)
1173cdf0e10cSrcweir {
1174cdf0e10cSrcweir 	m_decimal = * val;
1175cdf0e10cSrcweir 	return S_OK;
1176cdf0e10cSrcweir }
1177cdf0e10cSrcweir 
get_prpRefLong(long * pVal)1178cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpRefLong(long* pVal)
1179cdf0e10cSrcweir {
1180cdf0e10cSrcweir 	*pVal = m_long;
1181cdf0e10cSrcweir 	return S_OK;
1182cdf0e10cSrcweir }
1183cdf0e10cSrcweir 
putref_prpRefLong(long * newVal)1184cdf0e10cSrcweir STDMETHODIMP CBasic::putref_prpRefLong(long* newVal)
1185cdf0e10cSrcweir {
1186cdf0e10cSrcweir 	m_long = * newVal;
1187cdf0e10cSrcweir 	return S_OK;
1188cdf0e10cSrcweir }
1189cdf0e10cSrcweir 
get_prprefVariant(VARIANT * pVal)1190cdf0e10cSrcweir STDMETHODIMP CBasic::get_prprefVariant(VARIANT* pVal)
1191cdf0e10cSrcweir {
1192cdf0e10cSrcweir 	HRESULT hr = S_OK;
1193cdf0e10cSrcweir 	hr = VariantCopy(pVal, & m_var1);
1194cdf0e10cSrcweir 	return hr;
1195cdf0e10cSrcweir }
1196cdf0e10cSrcweir 
putref_prprefVariant(VARIANT * newVal)1197cdf0e10cSrcweir STDMETHODIMP CBasic::putref_prprefVariant(VARIANT* newVal)
1198cdf0e10cSrcweir {
1199cdf0e10cSrcweir 	m_var1 = * newVal;
1200cdf0e10cSrcweir 	return S_OK;
1201cdf0e10cSrcweir }
1202cdf0e10cSrcweir 
get_prprefDecimal(DECIMAL * pVal)1203cdf0e10cSrcweir STDMETHODIMP CBasic::get_prprefDecimal(DECIMAL* pVal)
1204cdf0e10cSrcweir {
1205cdf0e10cSrcweir 	* pVal = m_decimal;
1206cdf0e10cSrcweir 	return S_OK;
1207cdf0e10cSrcweir }
1208cdf0e10cSrcweir 
putref_prprefDecimal(DECIMAL * newVal)1209cdf0e10cSrcweir STDMETHODIMP CBasic::putref_prprefDecimal(DECIMAL* newVal)
1210cdf0e10cSrcweir {
1211cdf0e10cSrcweir 	m_decimal = *newVal;
1212cdf0e10cSrcweir 	return S_OK;
1213cdf0e10cSrcweir }
1214cdf0e10cSrcweir 
1215cdf0e10cSrcweir 
optional6(VARIANT * val1,VARIANT * val2,VARIANT * val3,VARIANT * val4)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 
optional7(VARIANT * val1,VARIANT * val2,VARIANT * val3,VARIANT * val4)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 
get_prpMultiArg1(VARIANT * val1,VARIANT * val2,VARIANT * pVal)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 
put_prpMultiArg1(VARIANT * val1,VARIANT * val2,VARIANT * newVal)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 
get_prpMultiArg2(VARIANT val1,VARIANT * pVal)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 
put_prpMultiArg2(VARIANT val1,VARIANT newVal)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
prpMultiArg2GetValues(VARIANT * val1,VARIANT * valProperty)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 
get_prpMultiArg3(LONG * val1,LONG * pVal)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 
put_prpMultiArg3(LONG * val1,LONG newVal)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 
inUnknown(IUnknown * val)1329cdf0e10cSrcweir STDMETHODIMP CBasic::inUnknown(IUnknown* val)
1330cdf0e10cSrcweir {
1331cdf0e10cSrcweir 	m_unknown = val;
1332cdf0e10cSrcweir 
1333cdf0e10cSrcweir 	return S_OK;
1334cdf0e10cSrcweir }
1335cdf0e10cSrcweir 
outUnknown(IUnknown ** val)1336cdf0e10cSrcweir STDMETHODIMP CBasic::outUnknown(IUnknown** val)
1337cdf0e10cSrcweir {
1338cdf0e10cSrcweir 	m_unknown.CopyTo(val);
1339cdf0e10cSrcweir 	return S_OK;
1340cdf0e10cSrcweir }
1341cdf0e10cSrcweir 
inoutUnknown(IUnknown ** val)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 
get_prpUnknown(IUnknown ** pVal)1350cdf0e10cSrcweir STDMETHODIMP CBasic::get_prpUnknown(IUnknown** pVal)
1351cdf0e10cSrcweir {
1352cdf0e10cSrcweir 	m_prpUnknown.CopyTo(pVal);
1353cdf0e10cSrcweir 	return S_OK;
1354cdf0e10cSrcweir }
1355cdf0e10cSrcweir 
put_prpUnknown(IUnknown * newVal)1356cdf0e10cSrcweir STDMETHODIMP CBasic::put_prpUnknown(IUnknown* newVal)
1357cdf0e10cSrcweir {
1358cdf0e10cSrcweir 	m_prpUnknown = newVal;
1359cdf0e10cSrcweir 	return S_OK;
1360cdf0e10cSrcweir }
1361