1*5c66ce18SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*5c66ce18SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*5c66ce18SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*5c66ce18SAndrew Rist  * distributed with this work for additional information
6*5c66ce18SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*5c66ce18SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*5c66ce18SAndrew Rist  * "License"); you may not use this file except in compliance
9*5c66ce18SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*5c66ce18SAndrew Rist  *
11*5c66ce18SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*5c66ce18SAndrew Rist  *
13*5c66ce18SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*5c66ce18SAndrew Rist  * software distributed under the License is distributed on an
15*5c66ce18SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5c66ce18SAndrew Rist  * KIND, either express or implied.  See the License for the
17*5c66ce18SAndrew Rist  * specific language governing permissions and limitations
18*5c66ce18SAndrew Rist  * under the License.
19*5c66ce18SAndrew Rist  *
20*5c66ce18SAndrew Rist  *************************************************************/
21*5c66ce18SAndrew Rist 
22*5c66ce18SAndrew Rist 
23cdf0e10cSrcweir // Basic.h : Declaration of the CBasic
24cdf0e10cSrcweir 
25cdf0e10cSrcweir #ifndef __BASIC_H_
26cdf0e10cSrcweir #define __BASIC_H_
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include "resource.h"       // main symbols
29cdf0e10cSrcweir //#include "AxTestComponents.h"
30cdf0e10cSrcweir #import  "AxTestComponents.tlb" no_namespace no_implementation raw_interfaces_only named_guids
31cdf0e10cSrcweir //#include "AxTestComponents.h"
32cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////////////
33cdf0e10cSrcweir // CBasic
34cdf0e10cSrcweir class ATL_NO_VTABLE CBasic :
35cdf0e10cSrcweir 	public CComObjectRootEx<CComSingleThreadModel>,
36cdf0e10cSrcweir 	public CComCoClass<CBasic, &CLSID_Basic>,
37cdf0e10cSrcweir 	public IDispatchImpl<IBasic, &IID_IBasic, &LIBID_AXTESTCOMPONENTSLib>
38cdf0e10cSrcweir 	{
39cdf0e10cSrcweir public:
40cdf0e10cSrcweir 	CBasic();
41cdf0e10cSrcweir 	~CBasic();
42cdf0e10cSrcweir 
43cdf0e10cSrcweir 	DECLARE_REGISTRY_RESOURCEID(IDR_BASIC)
44cdf0e10cSrcweir 
45cdf0e10cSrcweir 	DECLARE_PROTECT_FINAL_CONSTRUCT()
46cdf0e10cSrcweir 
47cdf0e10cSrcweir 	BEGIN_COM_MAP(CBasic)
48cdf0e10cSrcweir 		COM_INTERFACE_ENTRY(IBasic)
49cdf0e10cSrcweir 		COM_INTERFACE_ENTRY(IDispatch)
50cdf0e10cSrcweir 	END_COM_MAP()
51cdf0e10cSrcweir 
52cdf0e10cSrcweir 	// IBasic
53cdf0e10cSrcweir public:
54cdf0e10cSrcweir 	STDMETHOD(outMore)(/*[out]*/long* val1, /*[out]*/long* val2);
55cdf0e10cSrcweir 	STDMETHOD(inMulDimArrayByte2)(LPSAFEARRAY val);
56cdf0e10cSrcweir 	STDMETHOD(inMulDimArrayByte)(LPSAFEARRAY val);
57cdf0e10cSrcweir 	STDMETHOD(inMulDimArrayVariant2)(LPSAFEARRAY val);
58cdf0e10cSrcweir 	STDMETHOD(inMulDimArrayLong2)(LPSAFEARRAY val);
59cdf0e10cSrcweir 	STDMETHOD(inMulDimArrayVariant)(LPSAFEARRAY val);
60cdf0e10cSrcweir 	STDMETHOD(inMulDimArrayLong)( LPSAFEARRAY val);
61cdf0e10cSrcweir 	STDMETHOD(inoutSequenceObject)(LPSAFEARRAY* val);
62cdf0e10cSrcweir 	STDMETHOD(inoutSequenceDouble)(LPSAFEARRAY * val);
63cdf0e10cSrcweir 	STDMETHOD(inoutSequenceFloat)(LPSAFEARRAY * val);
64cdf0e10cSrcweir 	STDMETHOD(inoutSequenceString)(LPSAFEARRAY* val);
65cdf0e10cSrcweir 	STDMETHOD(inoutSequenceLong)(LPSAFEARRAY * val);
66cdf0e10cSrcweir 	STDMETHOD(inoutSequenceShort)(LPSAFEARRAY * val);
67cdf0e10cSrcweir 	STDMETHOD(inoutSequenceByte)(LPSAFEARRAY * val);
68cdf0e10cSrcweir 	STDMETHOD(outSequenceObject)(/*[out]*/ LPSAFEARRAY* val);
69cdf0e10cSrcweir 	STDMETHOD(outSequenceDouble)(/*[out]*/ LPSAFEARRAY* val);
70cdf0e10cSrcweir 	STDMETHOD(outSequenceFloat)(/*[out]*/ LPSAFEARRAY* val);
71cdf0e10cSrcweir 	STDMETHOD(outSequenceString)(/*[out]*/ LPSAFEARRAY* val);
72cdf0e10cSrcweir 	STDMETHOD(outSequenceLong)(/*[out]*/ LPSAFEARRAY* val);
73cdf0e10cSrcweir 	STDMETHOD(outSequenceShort)(/*[out]*/ LPSAFEARRAY* val);
74cdf0e10cSrcweir 	STDMETHOD(outSequenceByte)(/*[out]*/ LPSAFEARRAY* val);
75cdf0e10cSrcweir 	STDMETHOD(inSequenceObject)(LPSAFEARRAY ar);
76cdf0e10cSrcweir 	STDMETHOD(inSequenceDouble)(LPSAFEARRAY ar);
77cdf0e10cSrcweir 	STDMETHOD(inSequenceFloat)(LPSAFEARRAY ar);
78cdf0e10cSrcweir 	STDMETHOD(inSequenceString)(LPSAFEARRAY ar);
79cdf0e10cSrcweir 	STDMETHOD(inSequenceShort)(LPSAFEARRAY ar);
80cdf0e10cSrcweir 	STDMETHOD(inSequenceByte)(LPSAFEARRAY ar);
81cdf0e10cSrcweir 	STDMETHOD(inSequenceLong)(LPSAFEARRAY  ar);
82cdf0e10cSrcweir 	STDMETHOD(mixed1)(
83cdf0e10cSrcweir 		/* [out][in] */ unsigned char *aChar,
84cdf0e10cSrcweir 		/* [out][in] */ float *aFloat,
85cdf0e10cSrcweir 		/* [out][in] */ VARIANT *aVar);
86cdf0e10cSrcweir 		STDMETHOD(get_prpObject)(/*[out, retval]*/ IDispatch* *pVal);
87cdf0e10cSrcweir 	STDMETHOD(put_prpObject)(/*[in]*/ IDispatch* newVal);
88cdf0e10cSrcweir 	STDMETHOD(get_prpArray)(/*[out, retval]*/ LPSAFEARRAY *pVal);
89cdf0e10cSrcweir 	STDMETHOD(put_prpArray)(/*[in]*/ LPSAFEARRAY newVal);
90cdf0e10cSrcweir 	STDMETHOD(get_prpVariant)(/*[out, retval]*/ VARIANT *pVal);
91cdf0e10cSrcweir 	STDMETHOD(put_prpVariant)(/*[in]*/ VARIANT newVal);
92cdf0e10cSrcweir 	STDMETHOD(get_prpDouble)(/*[out, retval]*/ double *pVal);
93cdf0e10cSrcweir 	STDMETHOD(put_prpDouble)(/*[in]*/ double newVal);
94cdf0e10cSrcweir 	STDMETHOD(get_prpFloat)(/*[out, retval]*/ float *pVal);
95cdf0e10cSrcweir 	STDMETHOD(put_prpFloat)(/*[in]*/ float newVal);
96cdf0e10cSrcweir 	STDMETHOD(get_prpString)(/*[out, retval]*/ BSTR *pVal);
97cdf0e10cSrcweir 	STDMETHOD(put_prpString)(/*[in]*/ BSTR newVal);
98cdf0e10cSrcweir 	STDMETHOD(get_prpLong)(/*[out, retval]*/ long *pVal);
99cdf0e10cSrcweir 	STDMETHOD(put_prpLong)(/*[in]*/ long newVal);
100cdf0e10cSrcweir 	STDMETHOD(get_prpShort)(/*[out, retval]*/ short *pVal);
101cdf0e10cSrcweir 	STDMETHOD(put_prpShort)(/*[in]*/ short newVal);
102cdf0e10cSrcweir 	STDMETHOD(get_prpByte)(/*[out, retval]*/ unsigned char *pVal);
103cdf0e10cSrcweir 	STDMETHOD(put_prpByte)(/*[in]*/ unsigned char newVal);
104cdf0e10cSrcweir 	STDMETHOD(get_prpBool)(/*[out, retval]*/ VARIANT_BOOL *pVal);
105cdf0e10cSrcweir 	STDMETHOD(put_prpBool)(/*[in]*/ VARIANT_BOOL newVal);
106cdf0e10cSrcweir 
107cdf0e10cSrcweir 	STDMETHOD(outObject)(/*[out]*/ IDispatch* *val);
108cdf0e10cSrcweir 	STDMETHOD(outArray)(/*[out]*/ LPSAFEARRAY * val);
109cdf0e10cSrcweir 	STDMETHOD(outVariant)(/*[out]*/ VARIANT* val);
110cdf0e10cSrcweir 	STDMETHOD(outDouble)(/*[out]*/ double* val);
111cdf0e10cSrcweir 	STDMETHOD(outFloat)(/*[out]*/ float* val);
112cdf0e10cSrcweir 	STDMETHOD(outString)(/*[out]*/ BSTR* val);
113cdf0e10cSrcweir 	STDMETHOD(outLong)(/*[out]*/ long* val);
114cdf0e10cSrcweir 	STDMETHOD(outShort)(/*[out]*/ short* val);
115cdf0e10cSrcweir 	STDMETHOD(outByte)(/*[out]*/ unsigned char* val);
116cdf0e10cSrcweir 	STDMETHOD(outBool)(/*[out]*/ VARIANT_BOOL* val);
117cdf0e10cSrcweir 
118cdf0e10cSrcweir 	STDMETHOD(inoutObject)(/*[in,out]*/ IDispatch* *val);
119cdf0e10cSrcweir 	STDMETHOD(inoutArray)(/*[in,out]*/ LPSAFEARRAY * val);
120cdf0e10cSrcweir 	STDMETHOD(inoutVariant)(/*[in,out]*/ VARIANT * val);
121cdf0e10cSrcweir 	STDMETHOD(inoutDouble)(/*[in,out]*/ double * val);
122cdf0e10cSrcweir 	STDMETHOD(inoutFloat)(/*[in,out]*/ float * val);
123cdf0e10cSrcweir 	STDMETHOD(inoutString)(/*[in, out]*/ BSTR* val);
124cdf0e10cSrcweir 	STDMETHOD(inoutLong)(/*[in,out]*/ long * val);
125cdf0e10cSrcweir 	STDMETHOD(inoutShort)(/*[in,out]*/ short* val);
126cdf0e10cSrcweir 	STDMETHOD(inoutByte)(/*[in,out]*/ unsigned char* val);
127cdf0e10cSrcweir 	STDMETHOD(inoutBool)(/*[in,out]*/ VARIANT_BOOL* val);
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 
130cdf0e10cSrcweir 	STDMETHOD(inObject)(/*[in]*/ IDispatch* val);
131cdf0e10cSrcweir 	STDMETHOD(inArray)(/*[in]*/ LPSAFEARRAY val);
132cdf0e10cSrcweir 	STDMETHOD(inVariant)(/*[in]*/ VARIANT val);
133cdf0e10cSrcweir 	STDMETHOD(inDouble)(/*[in]*/ double val);
134cdf0e10cSrcweir 	STDMETHOD(inFloat)(/*[in]*/ float val);
135cdf0e10cSrcweir 	STDMETHOD(inString)(/*[in]*/ BSTR val);
136cdf0e10cSrcweir 	STDMETHOD(inLong)(/*[in]*/ long val);
137cdf0e10cSrcweir 	STDMETHOD(inShort)(/*[in]*/ short val);
138cdf0e10cSrcweir 	STDMETHOD(inByte)(/*[in]*/ unsigned char val);
139cdf0e10cSrcweir 	STDMETHOD(inBool)(/*[in]*/ VARIANT_BOOL val);
140cdf0e10cSrcweir 
141cdf0e10cSrcweir 
142cdf0e10cSrcweir 	STDMETHOD(optional1)(/*[in]*/ long val1, /*[in, optional]*/ VARIANT* val2);
143cdf0e10cSrcweir 	STDMETHOD(optional2)(/*[out]*/ long* val1,/*[out, optional]*/ VARIANT* val2);
144cdf0e10cSrcweir 	STDMETHOD(optional3)(/*[in, optional]*/ VARIANT* val1,/*[in, optional]*/ VARIANT* val2);
145cdf0e10cSrcweir 	STDMETHOD(optional4)(/*[in, out, optional]*/ VARIANT* val1,/*[in, out, optional]*/ VARIANT* val2);
146cdf0e10cSrcweir 	STDMETHOD(optional5)(/*[out, optional]*/ VARIANT* val1,/*[out, optional]*/ VARIANT* val2);
147cdf0e10cSrcweir 
148cdf0e10cSrcweir 
149cdf0e10cSrcweir 	STDMETHOD(defaultvalue1)(/*[in, defaultvalue(10)]*/ long val1,
150cdf0e10cSrcweir 		/*[in, defaultvalue(3.14)]*/ double* val2,
151cdf0e10cSrcweir 		// /*[in, defaultvalue(10)]*/ VARIANT val3,
152cdf0e10cSrcweir 		/*[in, defaultvalue(100)]*/ VARIANT* val4);
153cdf0e10cSrcweir 
154cdf0e10cSrcweir 		STDMETHOD(defaultvalue2)(/*[in, out, defaultvalue(10)]*/ long* val1,
155cdf0e10cSrcweir 		/*[in, out, defaultvalue(3.14)]*/ double* val2,
156cdf0e10cSrcweir 		// /*[in, out, defaultvalue(10)]*/ VARIANT* val3,
157cdf0e10cSrcweir 		/*[in, out, defaultvalue(100)]*/ VARIANT* val4);
158cdf0e10cSrcweir 
159cdf0e10cSrcweir 		STDMETHOD(varargfunc1)(/*[in]*/ long val1,/*[in]*/ LPSAFEARRAY val2);
160cdf0e10cSrcweir 
161cdf0e10cSrcweir 	STDMETHOD(varargfunc2)(/*[out]*/ long* val1, /*[out]*/ SAFEARRAY ** val2);
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 
164cdf0e10cSrcweir 	// members for property implementations
165cdf0e10cSrcweir 	unsigned char m_cPrpByte;
166cdf0e10cSrcweir 	short m_nPrpShort;
167cdf0e10cSrcweir 	long m_lPrpLong;
168cdf0e10cSrcweir 	float m_fPrpFloat;
169cdf0e10cSrcweir 	double m_dPrpDouble;
170cdf0e10cSrcweir 	CComPtr<IDispatch> m_PrpObject;
171cdf0e10cSrcweir 	CComPtr<IUnknown> m_prpUnknown;
172cdf0e10cSrcweir 
173cdf0e10cSrcweir 	CComBSTR m_bstrPrpString;
174cdf0e10cSrcweir 	CComVariant m_PropVariant;
175cdf0e10cSrcweir 	LPSAFEARRAY m_PrpArray;
176cdf0e10cSrcweir protected:
177cdf0e10cSrcweir 	VARIANT_BOOL m_bool;
178cdf0e10cSrcweir 	unsigned char  m_byte;
179cdf0e10cSrcweir 	short m_short;
180cdf0e10cSrcweir 	long m_long;
181cdf0e10cSrcweir 	long m_long2;
182cdf0e10cSrcweir 	float m_float;
183cdf0e10cSrcweir 	double m_double;
184cdf0e10cSrcweir 	CComVariant m_var1;
185cdf0e10cSrcweir 	CComVariant m_var2;
186cdf0e10cSrcweir 	CComVariant m_var3;
187cdf0e10cSrcweir 	CComVariant m_var4;
188cdf0e10cSrcweir 	CComBSTR m_bstr;
189cdf0e10cSrcweir 	CY m_cy;
190cdf0e10cSrcweir 	DATE m_date;
191cdf0e10cSrcweir 	DECIMAL m_decimal;
192cdf0e10cSrcweir 	SCODE m_scode;
193cdf0e10cSrcweir 	SAFEARRAY * m_safearray;
194cdf0e10cSrcweir 	CComPtr<IDispatch> m_obj;
195cdf0e10cSrcweir 	CComPtr<IUnknown> m_unknown;
196cdf0e10cSrcweir 
197cdf0e10cSrcweir 	SAFEARRAY * m_arByte;
198cdf0e10cSrcweir 	SAFEARRAY * m_arShort;
199cdf0e10cSrcweir 	SAFEARRAY * m_arLong;
200cdf0e10cSrcweir 	SAFEARRAY * m_arString;
201cdf0e10cSrcweir 	SAFEARRAY * m_arVariant;
202cdf0e10cSrcweir 	SAFEARRAY * m_arFloat;
203cdf0e10cSrcweir 	SAFEARRAY * m_arDouble;
204cdf0e10cSrcweir 	SAFEARRAY * m_arObject;
205cdf0e10cSrcweir 	SAFEARRAY * m_arByteDim2;
206cdf0e10cSrcweir 
207cdf0e10cSrcweir 	static void printArray(LPSAFEARRAY val, BSTR message, VARTYPE type);
208cdf0e10cSrcweir 	static void printMulArray(LPSAFEARRAY val, VARTYPE type);
209cdf0e10cSrcweir 
210cdf0e10cSrcweir 
211cdf0e10cSrcweir public:
212cdf0e10cSrcweir 	STDMETHOD(inSequenceByteDim2)(LPSAFEARRAY val);
213cdf0e10cSrcweir 	STDMETHOD(inCurrency)(CY val);
214cdf0e10cSrcweir 	STDMETHOD(outCurrency)(CY* val);
215cdf0e10cSrcweir 	STDMETHOD(inoutCurrency)(CY* val);
216cdf0e10cSrcweir 	STDMETHOD(inDate)(DATE val);
217cdf0e10cSrcweir 	STDMETHOD(outDate)(DATE* val);
218cdf0e10cSrcweir 	STDMETHOD(inoutDate)(DATE* val);
219cdf0e10cSrcweir 	STDMETHOD(get_prpCurrency)(CY* pVal);
220cdf0e10cSrcweir 	STDMETHOD(put_prpCurrency)(CY newVal);
221cdf0e10cSrcweir 	STDMETHOD(get_prpDate)(DATE* pVal);
222cdf0e10cSrcweir 	STDMETHOD(put_prpDate)(DATE newVal);
223cdf0e10cSrcweir 	STDMETHOD(inDecimal)(DECIMAL val);
224cdf0e10cSrcweir 	STDMETHOD(outDecimal)(DECIMAL* val);
225cdf0e10cSrcweir 	STDMETHOD(inoutDecimal)(DECIMAL* val);
226cdf0e10cSrcweir 	STDMETHOD(get_prpDecimal)(DECIMAL* pVal);
227cdf0e10cSrcweir 	STDMETHOD(put_prpDecimal)(DECIMAL newVal);
228cdf0e10cSrcweir 	STDMETHOD(inSCode)(SCODE val);
229cdf0e10cSrcweir 	STDMETHOD(outScode)(SCODE* val);
230cdf0e10cSrcweir 	STDMETHOD(inoutSCode)(SCODE* val);
231cdf0e10cSrcweir 	STDMETHOD(get_prpSCode)(SCODE* pVal);
232cdf0e10cSrcweir 	STDMETHOD(put_prpSCode)(SCODE newVal);
233cdf0e10cSrcweir 	STDMETHOD(inrefLong)(LONG* val);
234cdf0e10cSrcweir 	STDMETHOD(inrefVariant)(VARIANT* val);
235cdf0e10cSrcweir 	STDMETHOD(inrefDecimal)(DECIMAL* val);
236cdf0e10cSrcweir 	STDMETHOD(get_prpRefLong)(long* pVal);
237cdf0e10cSrcweir 	STDMETHOD(putref_prpRefLong)(long* newVal);
238cdf0e10cSrcweir 	STDMETHOD(get_prprefVariant)(VARIANT* pVal);
239cdf0e10cSrcweir 	STDMETHOD(putref_prprefVariant)(VARIANT* newVal);
240cdf0e10cSrcweir 	STDMETHOD(get_prprefDecimal)(DECIMAL* pVal);
241cdf0e10cSrcweir 	STDMETHOD(putref_prprefDecimal)(DECIMAL* newVal);
242cdf0e10cSrcweir 	STDMETHOD(optional6)(VARIANT* val1, VARIANT* val2, VARIANT* val3, VARIANT* val4);
243cdf0e10cSrcweir 	STDMETHOD(optional7)(VARIANT* val1, VARIANT* val2, VARIANT* val3, VARIANT* val4);
244cdf0e10cSrcweir 
245cdf0e10cSrcweir 	STDMETHOD(get_prpMultiArg1)(VARIANT* val1, VARIANT* val2, VARIANT* pVal);
246cdf0e10cSrcweir 	//STDMETHOD(get_prpMultiArg1)(VARIANT* val1, VARIANT* pVal);
247cdf0e10cSrcweir 	STDMETHOD(put_prpMultiArg1)(VARIANT* val1, VARIANT* val2, VARIANT* newVal);
248cdf0e10cSrcweir 	//STDMETHOD(put_prpMultiArg1)(VARIANT* val1, VARIANT* newVal);
249cdf0e10cSrcweir 	STDMETHOD(get_prpMultiArg2)(VARIANT val1, VARIANT* pVal);
250cdf0e10cSrcweir 	STDMETHOD(put_prpMultiArg2)(VARIANT val1, VARIANT newVal);
251cdf0e10cSrcweir 	STDMETHOD(prpMultiArg2GetValues)(VARIANT* val1, VARIANT* valProperty);
252cdf0e10cSrcweir 	STDMETHOD(get_prpMultiArg3)(LONG* val1, LONG* pVal);
253cdf0e10cSrcweir 	STDMETHOD(put_prpMultiArg3)(LONG* val1, LONG newVal);
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 	// IFoo Methods
256cdf0e10cSrcweir public:
257cdf0e10cSrcweir 	STDMETHOD(inUnknown)(IUnknown* val);
258cdf0e10cSrcweir 	STDMETHOD(outUnknown)(IUnknown** val);
259cdf0e10cSrcweir 	STDMETHOD(inoutUnknown)(IUnknown** val);
260cdf0e10cSrcweir 	STDMETHOD(get_prpUnknown)(IUnknown** pVal);
261cdf0e10cSrcweir 	STDMETHOD(put_prpUnknown)(IUnknown* newVal);
262cdf0e10cSrcweir };
263cdf0e10cSrcweir 
264cdf0e10cSrcweir #endif //__BASIC_H_
265cdf0e10cSrcweir 
266