1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
6 #include "MarshalArray.h"
9 bool Equals(T *pActual, int cActual, T *pExpected, int cExpected)
11 if (pActual == NULL && pExpected == NULL)
13 else if (pActual == NULL && pExpected != NULL)
15 else if (pActual != NULL && pExpected == NULL)
17 else if (cActual != cExpected)
20 for (int i = 0; i < cExpected; ++i)
22 if (!IsObjectEquals(pActual[i], pExpected[i]))
24 printf("WARNING: Test error - %s\n", __FUNCSIG__);
32 #define EQUALS(__actual, __cActual, __expected) Equals((__actual), (__cActual), (__expected), (int)sizeof(__expected) / sizeof(__expected[0]))
33 #define INIT_EXPECTED(__type, __size) \
34 __type expected[(__size)]; \
35 for (size_t i = 0; i < (__size); ++i) \
36 expected[i] = (__type)i
38 /////////////////////////////////////////// By Value /////////////////////////////////////////
39 extern "C" DLL_EXPORT BOOL CStyle_Array_Int(int *pActual, int cActual)
41 CHECK_PARAM_NOT_EMPTY(pActual);
43 INIT_EXPECTED(int, ARRAY_SIZE);
45 return EQUALS(pActual, cActual, expected);
49 extern "C" DLL_EXPORT BOOL CStyle_Array_Object(VARIANT *pActual, int cActual)
51 CHECK_PARAM_NOT_EMPTY(pActual);
53 //VARIANT expected[ARRAY_SIZE];
54 size_t nullIdx = ARRAY_SIZE / 2;
56 for (size_t i = 0; i < ARRAY_SIZE; ++i)
58 //VariantInit(&expected[i]);
61 if ((pActual[i].vt != VT_EMPTY))
63 printf("=====EMPTY VALUE NOT FOUND==== %s\n", __FUNCTION__);
71 if ((pActual[i].vt != VT_I4) && ((size_t)(pActual[i].lVal) != i))
73 printf("====VARIANTS NOT EQUAL==== %s\n", __FUNCTION__);
79 //EQUALS(pActual, cActual, expected);
83 extern "C" DLL_EXPORT BOOL CStyle_Array_Uint(UINT *pActual, int cActual)
85 CHECK_PARAM_NOT_EMPTY(pActual);
87 INIT_EXPECTED(UINT, ARRAY_SIZE);
89 return EQUALS(pActual, cActual, expected);
92 extern "C" DLL_EXPORT BOOL CStyle_Array_Short(SHORT *pActual, int cActual)
94 CHECK_PARAM_NOT_EMPTY(pActual);
96 INIT_EXPECTED(SHORT, ARRAY_SIZE);
98 return EQUALS(pActual, cActual, expected);
101 extern "C" DLL_EXPORT BOOL CStyle_Array_Word(WORD *pActual, int cActual)
103 CHECK_PARAM_NOT_EMPTY(pActual);
105 INIT_EXPECTED(WORD, ARRAY_SIZE);
107 return EQUALS(pActual, cActual, expected);
110 extern "C" DLL_EXPORT BOOL CStyle_Array_Long64(LONG64 *pActual, int cActual)
112 CHECK_PARAM_NOT_EMPTY(pActual);
114 INIT_EXPECTED(LONG64, ARRAY_SIZE);
116 return EQUALS(pActual, cActual, expected);
119 extern "C" DLL_EXPORT BOOL CStyle_Array_ULong64(ULONG64 *pActual, int cActual)
121 CHECK_PARAM_NOT_EMPTY(pActual);
123 INIT_EXPECTED(ULONG64, ARRAY_SIZE);
125 return EQUALS(pActual, cActual, expected);
128 extern "C" DLL_EXPORT BOOL CStyle_Array_Double(DOUBLE *pActual, int cActual)
130 CHECK_PARAM_NOT_EMPTY(pActual);
132 INIT_EXPECTED(DOUBLE, ARRAY_SIZE);
134 return EQUALS(pActual, cActual, expected);
137 extern "C" DLL_EXPORT BOOL CStyle_Array_Float(FLOAT *pActual, int cActual)
139 CHECK_PARAM_NOT_EMPTY(pActual);
141 INIT_EXPECTED(FLOAT, ARRAY_SIZE);
143 return EQUALS(pActual, cActual, expected);
146 extern "C" DLL_EXPORT BOOL CStyle_Array_Byte(BYTE *pActual, int cActual)
148 CHECK_PARAM_NOT_EMPTY(pActual);
150 INIT_EXPECTED(BYTE, ARRAY_SIZE);
152 return EQUALS(pActual, cActual, expected);
155 extern "C" DLL_EXPORT BOOL CStyle_Array_Char(CHAR *pActual, int cActual)
157 CHECK_PARAM_NOT_EMPTY(pActual);
159 INIT_EXPECTED(CHAR, ARRAY_SIZE);
161 return EQUALS(pActual, cActual, expected);
164 extern "C" DLL_EXPORT BOOL CStyle_Array_LPCSTR(LPCSTR *pActual, int cActual)
166 CHECK_PARAM_NOT_EMPTY(pActual);
168 LPSTR expected[ARRAY_SIZE];
169 size_t nullIdx = ARRAY_SIZE / 2;
170 for (size_t i = 0; i < ARRAY_SIZE; ++i)
177 expected[i] = ToString((int)i);
180 int retval = EQUALS((LPSTR *)pActual, cActual, expected);
182 for (size_t i = 0; i < ARRAY_SIZE; ++i)
187 CoreClrFree(expected[i]);
193 extern "C" DLL_EXPORT BOOL CStyle_Array_LPSTR(LPSTR *pActual, int cActual)
195 CHECK_PARAM_NOT_EMPTY(pActual);
197 return CStyle_Array_LPCSTR((LPCSTR *)pActual, cActual);
200 extern "C" DLL_EXPORT BOOL CStyle_Array_Struct(TestStruct *pActual, int cActual)
202 CHECK_PARAM_NOT_EMPTY(pActual);
204 TestStruct expected[ARRAY_SIZE];
205 for (size_t i = 0; i < ARRAY_SIZE; ++i)
207 expected[i].x = (int)i;
208 expected[i].d = (int)i;
209 expected[i].l = (LONG64)i;
210 expected[i].str = ToString((int)i);
213 return EQUALS(pActual, cActual, expected);
216 extern "C" DLL_EXPORT BOOL CStyle_Array_Bool(BOOL *pActual, int cActual)
218 CHECK_PARAM_NOT_EMPTY(pActual);
220 BOOL expected[ARRAY_SIZE];
221 for (size_t i = 0; i < ARRAY_SIZE; ++i)
229 return EQUALS(pActual, cActual, expected);
232 /////////////////////////////////////////// In Out By Value /////////////////////////////////////////
234 void ChangeArrayValue(T *pArray, int cSize)
236 for (int i = 0; i < cSize; ++i)
237 pArray[i] = (T)(cSize - 1 - i);
241 void ChangeArrayValue(LPSTR *pArray, int cSize)
243 for (int i = 0; i < cSize; ++i)
246 CoreClrFree(pArray[i]);
247 pArray[i] = ToString(cSize - 1 - i);
250 int nullIdx = cSize / 2 - 1;
251 CoreClrFree(pArray[nullIdx]);
252 pArray[nullIdx] = NULL;
256 void ChangeArrayValue(LPCSTR *pArray, int cSize)
258 for (int i = 0; i < cSize; ++i)
261 CoreClrFree((LPVOID)pArray[i]);
262 pArray[i] = ToString(cSize - 1 - i);
265 int nullIdx = cSize / 2 - 1;
266 CoreClrFree((LPVOID)pArray[nullIdx]);
267 pArray[nullIdx] = NULL;
272 void ChangeArrayValue(VARIANT *pArray, int cSize)
274 for (int i = 0; i < cSize; ++i)
277 VariantClear(&pArray[i]);
278 pArray[i].vt = VT_I4;
279 pArray[i].lVal = cSize - 1 - i;
282 int nullIdx = cSize / 2 - 1;
283 VariantClear(&pArray[nullIdx]);
284 pArray[nullIdx].vt = VT_EMPTY;
289 void ChangeArrayValue(TestStruct *pArray, int cSize)
291 for (int i = 0; i < cSize; ++i)
293 int v = (cSize - 1 - i);
297 pArray[i].str = ToString(v);
301 extern "C" DLL_EXPORT BOOL CStyle_Array_Int_InOut(int *pActual, int cActual)
303 CHECK_PARAM_NOT_EMPTY(pActual);
305 BOOL retval = CStyle_Array_Int(pActual, cActual);
306 ChangeArrayValue(pActual, cActual);
311 extern "C" DLL_EXPORT BOOL CStyle_Array_Int_InOut_Null(int *pActual)
313 CHECK_PARAM_EMPTY(pActual);
317 extern "C" DLL_EXPORT BOOL CStyle_Array_Int_InOut_ZeroLength(int *pActual)
319 CHECK_PARAM_NOT_EMPTY(pActual);
324 extern "C" DLL_EXPORT BOOL CStyle_Array_Object_InOut(VARIANT *pActual, int cActual)
326 CHECK_PARAM_NOT_EMPTY(pActual);
328 BOOL retval = CStyle_Array_Object(pActual, cActual);
329 ChangeArrayValue(pActual, cActual);
335 extern "C" DLL_EXPORT BOOL CStyle_Array_Uint_InOut(UINT *pActual, int cActual)
337 CHECK_PARAM_NOT_EMPTY(pActual);
339 BOOL retval = CStyle_Array_Uint(pActual, cActual);
340 ChangeArrayValue(pActual, cActual);
345 extern "C" DLL_EXPORT BOOL CStyle_Array_Short_InOut(SHORT *pActual, int cActual)
347 CHECK_PARAM_NOT_EMPTY(pActual);
349 BOOL retval = CStyle_Array_Short(pActual, cActual);
350 ChangeArrayValue(pActual, cActual);
355 extern "C" DLL_EXPORT BOOL CStyle_Array_Word_InOut(WORD *pActual, int cActual)
357 CHECK_PARAM_NOT_EMPTY(pActual);
359 BOOL retval = CStyle_Array_Word(pActual, cActual);
360 ChangeArrayValue(pActual, cActual);
365 extern "C" DLL_EXPORT BOOL CStyle_Array_Long64_InOut(LONG64 *pActual, int cActual)
367 CHECK_PARAM_NOT_EMPTY(pActual);
369 BOOL retval = CStyle_Array_Long64(pActual, cActual);
370 ChangeArrayValue(pActual, cActual);
375 extern "C" DLL_EXPORT BOOL CStyle_Array_ULong64_InOut(ULONG64 *pActual, int cActual)
377 CHECK_PARAM_NOT_EMPTY(pActual);
379 BOOL retval = CStyle_Array_ULong64(pActual, cActual);
380 ChangeArrayValue(pActual, cActual);
385 extern "C" DLL_EXPORT BOOL CStyle_Array_Double_InOut(DOUBLE *pActual, int cActual)
387 CHECK_PARAM_NOT_EMPTY(pActual);
389 BOOL retval = CStyle_Array_Double(pActual, cActual);
390 ChangeArrayValue(pActual, cActual);
395 extern "C" DLL_EXPORT BOOL CStyle_Array_Float_InOut(FLOAT *pActual, int cActual)
397 CHECK_PARAM_NOT_EMPTY(pActual);
399 BOOL retval = CStyle_Array_Float(pActual, cActual);
400 ChangeArrayValue(pActual, cActual);
405 extern "C" DLL_EXPORT BOOL CStyle_Array_Byte_InOut(BYTE *pActual, int cActual)
407 CHECK_PARAM_NOT_EMPTY(pActual);
409 BOOL retval = CStyle_Array_Byte(pActual, cActual);
410 ChangeArrayValue(pActual, cActual);
415 extern "C" DLL_EXPORT BOOL CStyle_Array_Char_InOut(CHAR *pActual, int cActual)
417 CHECK_PARAM_NOT_EMPTY(pActual);
419 BOOL retval = CStyle_Array_Char(pActual, cActual);
420 ChangeArrayValue(pActual, cActual);
425 extern "C" DLL_EXPORT BOOL CStyle_Array_LPSTR_InOut(LPSTR *pActual, int cActual)
427 CHECK_PARAM_NOT_EMPTY(pActual);
429 BOOL retval = CStyle_Array_LPSTR(pActual, cActual);
430 ChangeArrayValue(pActual, cActual);
435 extern "C" DLL_EXPORT BOOL CStyle_Array_Struct_InOut(TestStruct *pActual, int cActual)
437 CHECK_PARAM_NOT_EMPTY(pActual);
439 BOOL retval = CStyle_Array_Struct(pActual, cActual);
440 ChangeArrayValue(pActual, cActual);
445 extern "C" DLL_EXPORT BOOL CStyle_Array_Bool_InOut(BOOL *pActual, int cActual)
447 CHECK_PARAM_NOT_EMPTY(pActual);
449 BOOL retval = CStyle_Array_Bool(pActual, cActual);
451 for (int i = 0; i < cActual; ++i)
462 /////////////////////////////////////////// Out By Value /////////////////////////////////////////
463 extern "C" DLL_EXPORT BOOL CStyle_Array_Int_Out(int *pActual, int cActual)
465 CHECK_PARAM_NOT_EMPTY(pActual);
467 ChangeArrayValue(pActual, cActual);
471 extern "C" DLL_EXPORT BOOL CStyle_Array_Int_Out_Null(int *pActual)
473 CHECK_PARAM_EMPTY(pActual);
477 extern "C" DLL_EXPORT BOOL CStyle_Array_Int_Out_ZeroLength(int *pActual)
479 CHECK_PARAM_NOT_EMPTY(pActual);
484 extern "C" DLL_EXPORT BOOL CStyle_Array_Object_Out(VARIANT *pActual, int cActual)
486 CHECK_PARAM_NOT_EMPTY(pActual);
488 ChangeArrayValue(pActual, cActual);
494 extern "C" DLL_EXPORT BOOL CStyle_Array_Uint_Out(UINT *pActual, int cActual)
496 CHECK_PARAM_NOT_EMPTY(pActual);
498 ChangeArrayValue(pActual, cActual);
503 extern "C" DLL_EXPORT BOOL CStyle_Array_Short_Out(SHORT *pActual, int cActual)
505 CHECK_PARAM_NOT_EMPTY(pActual);
507 ChangeArrayValue(pActual, cActual);
512 extern "C" DLL_EXPORT BOOL CStyle_Array_Word_Out(WORD *pActual, int cActual)
514 CHECK_PARAM_NOT_EMPTY(pActual);
516 ChangeArrayValue(pActual, cActual);
521 extern "C" DLL_EXPORT BOOL CStyle_Array_Long64_Out(LONG64 *pActual, int cActual)
523 CHECK_PARAM_NOT_EMPTY(pActual);
525 ChangeArrayValue(pActual, cActual);
530 extern "C" DLL_EXPORT BOOL CStyle_Array_ULong64_Out(ULONG64 *pActual, int cActual)
532 CHECK_PARAM_NOT_EMPTY(pActual);
534 ChangeArrayValue(pActual, cActual);
539 extern "C" DLL_EXPORT BOOL CStyle_Array_Double_Out(DOUBLE *pActual, int cActual)
541 CHECK_PARAM_NOT_EMPTY(pActual);
543 ChangeArrayValue(pActual, cActual);
548 extern "C" DLL_EXPORT BOOL CStyle_Array_Float_Out(FLOAT *pActual, int cActual)
550 CHECK_PARAM_NOT_EMPTY(pActual);
552 ChangeArrayValue(pActual, cActual);
557 extern "C" DLL_EXPORT BOOL CStyle_Array_Byte_Out(BYTE *pActual, int cActual)
559 CHECK_PARAM_NOT_EMPTY(pActual);
561 ChangeArrayValue(pActual, cActual);
566 extern "C" DLL_EXPORT BOOL CStyle_Array_Char_Out(CHAR *pActual, int cActual)
568 CHECK_PARAM_NOT_EMPTY(pActual);
570 ChangeArrayValue(pActual, cActual);
575 extern "C" DLL_EXPORT BOOL CStyle_Array_LPSTR_Out(LPSTR *pActual, int cActual)
577 CHECK_PARAM_NOT_EMPTY(pActual);
579 ChangeArrayValue(pActual, cActual);
584 extern "C" DLL_EXPORT BOOL CStyle_Array_Struct_Out(TestStruct *pActual, int cActual)
586 CHECK_PARAM_NOT_EMPTY(pActual);
588 ChangeArrayValue(pActual, cActual);
593 extern "C" DLL_EXPORT BOOL CStyle_Array_Bool_Out(BOOL *pActual, int cActual)
595 CHECK_PARAM_NOT_EMPTY(pActual);
597 for (int i = 0; i < cActual; ++i)
608 /////////////////////////////////////////// InAttribute ByRef /////////////////////////////////////////
609 extern "C" DLL_EXPORT BOOL CStyle_Array_Int_In_Ref(int **ppActual, int cActual)
611 if (!CStyle_Array_Int(*ppActual, cActual))
615 ChangeArrayValue(*ppActual, cActual);
620 extern "C" DLL_EXPORT BOOL CStyle_Array_Object_In_Ref(VARIANT **ppActual, int cActual)
622 if (!CStyle_Array_Object(*ppActual, cActual))
625 ChangeArrayValue(*ppActual, cActual);
630 extern "C" DLL_EXPORT BOOL CStyle_Array_Uint_In_Ref(UINT **ppActual, int cActual)
632 if (!CStyle_Array_Uint(*ppActual, cActual))
635 ChangeArrayValue(*ppActual, cActual);
639 extern "C" DLL_EXPORT BOOL CStyle_Array_Short_In_Ref(SHORT **ppActual, int cActual)
641 if (!CStyle_Array_Short(*ppActual, cActual))
644 ChangeArrayValue(*ppActual, cActual);
648 extern "C" DLL_EXPORT BOOL CStyle_Array_Word_In_Ref(WORD **ppActual, int cActual)
650 if (!CStyle_Array_Word(*ppActual, cActual))
653 ChangeArrayValue(*ppActual, cActual);
657 extern "C" DLL_EXPORT BOOL CStyle_Array_Long64_In_Ref(LONG64 **ppActual, int cActual)
659 if (!CStyle_Array_Long64(*ppActual, cActual))
662 ChangeArrayValue(*ppActual, cActual);
666 extern "C" DLL_EXPORT BOOL CStyle_Array_ULong64_In_Ref(ULONG64 **ppActual, int cActual)
668 if (!CStyle_Array_ULong64(*ppActual, cActual))
671 ChangeArrayValue(*ppActual, cActual);
675 extern "C" DLL_EXPORT BOOL CStyle_Array_Double_In_Ref(DOUBLE **ppActual, int cActual)
677 if (!CStyle_Array_Double(*ppActual, cActual))
680 ChangeArrayValue(*ppActual, cActual);
684 extern "C" DLL_EXPORT BOOL CStyle_Array_Float_In_Ref(FLOAT **ppActual, int cActual)
686 if (!CStyle_Array_Float(*ppActual, cActual))
689 ChangeArrayValue(*ppActual, cActual);
693 extern "C" DLL_EXPORT BOOL CStyle_Array_Byte_In_Ref(BYTE **ppActual, int cActual)
695 if (!CStyle_Array_Byte(*ppActual, cActual))
698 ChangeArrayValue(*ppActual, cActual);
702 extern "C" DLL_EXPORT BOOL CStyle_Array_Char_In_Ref(CHAR **ppActual, int cActual)
704 if (!CStyle_Array_Char(*ppActual, cActual))
707 ChangeArrayValue(*ppActual, cActual);
711 extern "C" DLL_EXPORT BOOL CStyle_Array_LPCSTR_In_Ref(LPCSTR **ppActual, int cActual)
713 if (!CStyle_Array_LPCSTR(*ppActual, cActual))
716 ChangeArrayValue(*ppActual, cActual);
720 extern "C" DLL_EXPORT BOOL CStyle_Array_LPSTR_In_Ref(LPSTR **ppActual, int cActual)
722 if (!CStyle_Array_LPSTR(*ppActual, cActual))
725 ChangeArrayValue(*ppActual, cActual);
729 extern "C" DLL_EXPORT BOOL CStyle_Array_Struct_In_Ref(TestStruct **ppActual, int cActual)
731 if (!CStyle_Array_Struct(*ppActual, cActual))
734 ChangeArrayValue(*ppActual, cActual);
738 extern "C" DLL_EXPORT BOOL CStyle_Array_Bool_In_Ref(BOOL **ppActual, int cActual)
740 if (!CStyle_Array_Bool(*ppActual, cActual))
743 BOOL *pActual = *ppActual;
745 for (int i = 0; i < cActual; ++i)
756 /////////////////////////////////////////// OutAttribute ByRef /////////////////////////////////////////
757 extern "C" DLL_EXPORT BOOL CStyle_Array_Int_Out_Ref(int **ppActual, int cActual)
759 CHECK_PARAM_EMPTY(*ppActual);
761 ChangeArrayValue(*ppActual, cActual);
767 extern "C" DLL_EXPORT BOOL CStyle_Array_Object_Out_Ref(VARIANT **ppActual, int cActual)
769 CHECK_PARAM_EMPTY(*ppActual);
771 ChangeArrayValue(*ppActual, cActual);
777 extern "C" DLL_EXPORT BOOL CStyle_Array_Uint_Out_Ref(UINT **ppActual, int cActual)
779 CHECK_PARAM_EMPTY(*ppActual);
781 ChangeArrayValue(*ppActual, cActual);
786 extern "C" DLL_EXPORT BOOL CStyle_Array_Short_Out_Ref(SHORT **ppActual, int cActual)
788 CHECK_PARAM_EMPTY(*ppActual);
790 ChangeArrayValue(*ppActual, cActual);
795 extern "C" DLL_EXPORT BOOL CStyle_Array_Word_Out_Ref(WORD **ppActual, int cActual)
797 CHECK_PARAM_EMPTY(*ppActual);
799 ChangeArrayValue(*ppActual, cActual);
804 extern "C" DLL_EXPORT BOOL CStyle_Array_Long64_Out_Ref(LONG64 **ppActual, int cActual)
806 CHECK_PARAM_EMPTY(*ppActual);
808 ChangeArrayValue(*ppActual, cActual);
813 extern "C" DLL_EXPORT BOOL CStyle_Array_ULong64_Out_Ref(ULONG64 **ppActual, int cActual)
815 CHECK_PARAM_EMPTY(*ppActual);
817 ChangeArrayValue(*ppActual, cActual);
822 extern "C" DLL_EXPORT BOOL CStyle_Array_Double_Out_Ref(DOUBLE **ppActual, int cActual)
824 CHECK_PARAM_EMPTY(*ppActual);
826 ChangeArrayValue(*ppActual, cActual);
831 extern "C" DLL_EXPORT BOOL CStyle_Array_Float_Out_Ref(FLOAT **ppActual, int cActual)
833 CHECK_PARAM_EMPTY(*ppActual);
835 ChangeArrayValue(*ppActual, cActual);
840 extern "C" DLL_EXPORT BOOL CStyle_Array_Byte_Out_Ref(BYTE **ppActual, int cActual)
842 CHECK_PARAM_EMPTY(*ppActual);
844 ChangeArrayValue(*ppActual, cActual);
849 extern "C" DLL_EXPORT BOOL CStyle_Array_Char_Out_Ref(CHAR **ppActual, int cActual)
851 CHECK_PARAM_EMPTY(*ppActual);
853 ChangeArrayValue(*ppActual, cActual);
858 extern "C" DLL_EXPORT BOOL CStyle_Array_LPCSTR_Out_Ref(LPCSTR **ppActual, int cActual)
860 CHECK_PARAM_EMPTY(*ppActual);
862 ChangeArrayValue(*ppActual, cActual);
867 extern "C" DLL_EXPORT BOOL CStyle_Array_LPSTR_Out_Ref(LPSTR **ppActual, int cActual)
869 CHECK_PARAM_EMPTY(*ppActual);
871 ChangeArrayValue(*ppActual, cActual);
876 extern "C" DLL_EXPORT BOOL CStyle_Array_Struct_Out_Ref(TestStruct **ppActual, int cActual)
878 CHECK_PARAM_EMPTY(*ppActual);
880 ChangeArrayValue(*ppActual, cActual);
885 extern "C" DLL_EXPORT BOOL CStyle_Array_Bool_Out_Ref(BOOL **ppActual, int cActual)
887 CHECK_PARAM_EMPTY(*ppActual);
889 BOOL *pArray = *ppActual;
890 for (int i = 0; i < cActual; ++i)
901 /////////////////////////////////////////// InAttribute OutAttribute ByRef /////////////////////////////////////////
902 extern "C" DLL_EXPORT BOOL CStyle_Array_Int_InOut_Ref(int **ppActual, int cActual)
904 CHECK_PARAM_NOT_EMPTY(*ppActual);
906 BOOL retval = CStyle_Array_Int_In_Ref(ppActual, cActual);
907 ChangeArrayValue(*ppActual, cActual);
913 extern "C" DLL_EXPORT BOOL CStyle_Array_Object_InOut_Ref(VARIANT **ppActual, int cActual)
915 CHECK_PARAM_NOT_EMPTY(*ppActual);
917 BOOL retval = CStyle_Array_Object_In_Ref(ppActual, cActual);
918 ChangeArrayValue(*ppActual, cActual);
924 extern "C" DLL_EXPORT BOOL CStyle_Array_Uint_InOut_Ref(UINT **ppActual, int cActual)
926 CHECK_PARAM_NOT_EMPTY(*ppActual);
928 BOOL retval = CStyle_Array_Uint_In_Ref(ppActual, cActual);
929 ChangeArrayValue(*ppActual, cActual);
934 extern "C" DLL_EXPORT BOOL CStyle_Array_Short_InOut_Ref(SHORT **ppActual, int cActual)
936 CHECK_PARAM_NOT_EMPTY(*ppActual);
938 BOOL retval = CStyle_Array_Short_In_Ref(ppActual, cActual);
939 ChangeArrayValue(*ppActual, cActual);
944 extern "C" DLL_EXPORT BOOL CStyle_Array_Word_InOut_Ref(WORD **ppActual, int cActual)
946 CHECK_PARAM_NOT_EMPTY(*ppActual);
948 BOOL retval = CStyle_Array_Word_In_Ref(ppActual, cActual);
949 ChangeArrayValue(*ppActual, cActual);
954 extern "C" DLL_EXPORT BOOL CStyle_Array_Long64_InOut_Ref(LONG64 **ppActual, int cActual)
956 CHECK_PARAM_NOT_EMPTY(*ppActual);
958 BOOL retval = CStyle_Array_Long64_In_Ref(ppActual, cActual);
959 ChangeArrayValue(*ppActual, cActual);
964 extern "C" DLL_EXPORT BOOL CStyle_Array_ULong64_InOut_Ref(ULONG64 **ppActual, int cActual)
966 CHECK_PARAM_NOT_EMPTY(*ppActual);
968 BOOL retval = CStyle_Array_ULong64_In_Ref(ppActual, cActual);
969 ChangeArrayValue(*ppActual, cActual);
974 extern "C" DLL_EXPORT BOOL CStyle_Array_Double_InOut_Ref(DOUBLE **ppActual, int cActual)
976 CHECK_PARAM_NOT_EMPTY(*ppActual);
978 BOOL retval = CStyle_Array_Double_In_Ref(ppActual, cActual);
979 ChangeArrayValue(*ppActual, cActual);
984 extern "C" DLL_EXPORT BOOL CStyle_Array_Float_InOut_Ref(FLOAT **ppActual, int cActual)
986 CHECK_PARAM_NOT_EMPTY(*ppActual);
988 BOOL retval = CStyle_Array_Float_In_Ref(ppActual, cActual);
989 ChangeArrayValue(*ppActual, cActual);
994 extern "C" DLL_EXPORT BOOL CStyle_Array_Byte_InOut_Ref(BYTE **ppActual, int cActual)
996 CHECK_PARAM_NOT_EMPTY(*ppActual);
998 BOOL retval = CStyle_Array_Byte_In_Ref(ppActual, cActual);
999 ChangeArrayValue(*ppActual, cActual);
1004 extern "C" DLL_EXPORT BOOL CStyle_Array_Char_InOut_Ref(CHAR **ppActual, int cActual)
1006 CHECK_PARAM_NOT_EMPTY(*ppActual);
1008 BOOL retval = CStyle_Array_Char_In_Ref(ppActual, cActual);
1009 ChangeArrayValue(*ppActual, cActual);
1014 extern "C" DLL_EXPORT BOOL CStyle_Array_LPCSTR_InOut_Ref(LPCSTR **ppActual, int cActual)
1016 CHECK_PARAM_NOT_EMPTY(*ppActual);
1018 BOOL retval = CStyle_Array_LPCSTR_In_Ref(ppActual, cActual);
1019 ChangeArrayValue(*ppActual, cActual);
1024 extern "C" DLL_EXPORT BOOL CStyle_Array_LPSTR_InOut_Ref(LPSTR **ppActual, int cActual)
1026 CHECK_PARAM_NOT_EMPTY(*ppActual);
1028 BOOL retval = CStyle_Array_LPSTR_In_Ref(ppActual, cActual);
1029 ChangeArrayValue(*ppActual, cActual);
1034 extern "C" DLL_EXPORT BOOL CStyle_Array_Struct_InOut_Ref(TestStruct **ppActual, int cActual)
1036 CHECK_PARAM_NOT_EMPTY(*ppActual);
1038 BOOL retval = CStyle_Array_Struct_In_Ref(ppActual, cActual);
1039 ChangeArrayValue(*ppActual, cActual);
1044 extern "C" DLL_EXPORT BOOL CStyle_Array_Bool_InOut_Ref(BOOL **ppActual, int cActual)
1046 CHECK_PARAM_NOT_EMPTY(*ppActual);
1048 BOOL retval = CStyle_Array_Bool_In_Ref(ppActual, cActual);
1050 BOOL *pArray = *ppActual;
1051 for (int i = 0; i < cActual; ++i)
1062 ////////////////////////////////Added marshal array of struct as LPArray//////////////////////////////////
1063 extern "C" DLL_EXPORT BOOL MarshalArrayOfStructAsLPArrayByVal(S2 *pActual, int cActual, S2* pExpect)
1065 bool breturn = true;
1066 S2 *correctArr = pExpect;
1067 if (!(ValidateS2LPArray(pActual, correctArr, cActual)))
1071 for (int j = 0; j < cActual; j++)
1073 InstanceS2(&pActual[j], 0, 32, 0, 16, 0, 8, 0, 16, 0, 64, 64.0F, 6.4);
1078 extern "C" DLL_EXPORT BOOL MarshalArrayOfStructAsLPArrayByRef(S2 **pActual, int cActual, S2* pExpect)
1080 return MarshalArrayOfStructAsLPArrayByVal(*pActual, cActual, pExpect);
1083 extern "C" DLL_EXPORT BOOL MarshalArrayOfStructAsLPArrayByValOut(S2 *pActual, int cActual)
1085 BOOL breturn = true;
1086 for (int j = 0; j < cActual; j++)
1088 InstanceS2(&pActual[j], 0, 32, 0, 16, 0, 8, 0, 16, 0, 64, 64.0F, 6.4);
1093 extern "C" DLL_EXPORT BOOL MarshalArrayOfStructAsLPArrayByValInOut(S2 *pActual, int cActual)
1095 BOOL breturn = true;
1099 extern "C" DLL_EXPORT BOOL MarshalArrayOfStructAsLPArrayByRefOut(S2 **pActual, int cActual)
1101 BOOL breturn = true;
1102 for (int j = 0; j < cActual; j++)
1104 InstanceS2(&((*pActual)[j]), 0, 32, 0, 16, 0, 8, 0, 16, 0, 64, 64.0F, 6.4);