42#ifndef FADF_CREATEVECTOR
53#define GETPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func)
68#define START_REF_COUNT 1
70#define RECORD_SIZE_FAIL 17
96 IRecordInfo_AddRef(iface);
122 ok(0,
"unexpected call\n");
144 ok(0,
"unexpected call\n");
150 ok(0,
"unexpected call\n");
169 ok(0,
"unexpected call\n");
174 LPCOLESTR szFieldName,
VARIANT *pvarField)
176 ok(0,
"unexpected call\n");
181 LPCOLESTR szFieldName,
VARIANT *pvarField,
PVOID *ppvDataCArray)
183 ok(0,
"unexpected call\n");
188 LPCOLESTR szFieldName,
VARIANT *pvarField)
190 ok(0,
"unexpected call\n");
197 ok(0,
"unexpected call\n");
204 ok(0,
"unexpected call\n");
210 ok(0,
"unexpected call\n");
216 ok(0,
"unexpected call\n");
223 ok(0,
"unexpected call\n");
229 ok(0,
"unexpected call\n");
316 trace(
"VT_INT_PTR is supported\n");
322 trace(
"VT_INT_PTR is not supported\n");
327#define VARTYPE_NOT_SUPPORTED 0
336{
VT_I2, 2, FADF_HAVEVARTYPE,0},
337{
VT_I4, 4, FADF_HAVEVARTYPE,0},
338{
VT_R4, 4, FADF_HAVEVARTYPE,0},
339{
VT_R8, 8, FADF_HAVEVARTYPE,0},
340{
VT_CY, 8, FADF_HAVEVARTYPE,0},
341{
VT_DATE, 8, FADF_HAVEVARTYPE,0},
342{
VT_BSTR,
sizeof(
BSTR), FADF_HAVEVARTYPE,FADF_BSTR},
343{
VT_DISPATCH,
sizeof(LPDISPATCH), FADF_HAVEIID, FADF_DISPATCH},
345{
VT_BOOL, 2, FADF_HAVEVARTYPE,0},
350{
VT_I1, 1, FADF_HAVEVARTYPE,0},
351{
VT_UI1, 1, FADF_HAVEVARTYPE,0},
352{
VT_UI2, 2, FADF_HAVEVARTYPE,0},
353{
VT_UI4, 4, FADF_HAVEVARTYPE,0},
356{
VT_INT,
sizeof(
INT), FADF_HAVEVARTYPE,0},
381 unsigned int i, diff;
390 unsigned char *ptr1, *ptr2;
393 ok(
hres ==
S_OK,
"SafeArrayDestroy( NULL) returned 0x%lx\n",
hres);
398 ok(
NULL ==
a,
"SAC(-1,1,[1,0]) not failed?\n");
403 ok(
NULL !=
a,
"SAC(VT_I4,1,[0,0]) failed.\n");
406 ok(
hres ==
S_OK,
"SAGLB of 0 size dimensioned array failed with %lx\n",
hres);
407 ok(
l == 42,
"SAGLB of 0 size dimensioned array failed to return 42, but returned %ld\n",
l);
409 ok(
hres ==
S_OK,
"SAGUB of 0 size dimensioned array failed with %lx\n",
hres);
410 ok(
l == 41,
"SAGUB of 0 size dimensioned array failed to return 41, but returned %ld\n",
l);
413 ok(
hres ==
S_OK,
"SafeArrayAccessData of 0 size dimensioned array failed with %lx\n",
hres);
418 ok(
hres ==
S_OK,
"SAR of a 0 elements dimension failed with hres %lx\n",
hres);
422 "SAR to a 0 elements dimension failed with hres %lx\n",
hres);
424 ok(
hres ==
S_OK,
"SAD of 0 dim array failed with hres %lx\n",
hres);
427 a->rgsabound[0].cElements = 2;
428 a->rgsabound[0].lLbound = 1;
429 a->rgsabound[1].cElements = 4;
430 a->rgsabound[1].lLbound = 1;
433 ok(
hres ==
S_OK,
"SafeArrayAllocData failed with hres %lx\n",
hres);
440 ok(ptr1 - ptr2 == 14,
"SAPOI got wrong ptr\n");
441 *(
WORD *)ptr1 = 0x55aa;
449 ok(*(
WORD *)ptr1 == 0x55aa,
"Data not preserved when resizing array\n");
457 "Expanded area not zero-initialized\n");
461 ok(*(
WORD *)ptr1 == 0x55aa ||
463 "Data not preserved when resizing array\n");
471 ok(
a !=
NULL,
"SAC(VT_INT32,2,...) with 0 element dim failed.\n");
478 ok(
a !=
NULL,
"SAC(VT_INT32,2,...) with 0 element dim failed.\n");
486 ok(
a !=
NULL,
"SAC(VT_INT32,2,...) failed.\n");
492 ok (
l == 1,
"SAGLB 1 returned %ld instead of 1\n",
l);
495 ok (
l == 23,
"SAGLB 2 returned %ld instead of 23\n",
l);
503 ok (
l == 42,
"SAGUB 1 returned %ld instead of 42\n",
l);
506 ok (
l == 24,
"SAGUB 2 returned %ld instead of 24\n",
l);
511 ok(
i == 2,
"getdims of 2 din array returned %d\n",
i);
546 ok(diff == 8,
"ptr difference is not 8, but %d (%p vs %p)\n", diff, ptr2, ptr1);
553 ok(diff == 176,
"ptr difference is not 176, but %d (%p vs %p)\n", diff, ptr2, ptr1);
560 ok(diff == 76,
"ptr difference is not 76, but %d (%p vs %p)\n", diff, ptr2, ptr1);
578 "SAC(%d,1,[1,0]), %p result %ld, expected %d\n",
584 "SAC of %d returned feature flags %x, expected %x\n",
588 "SAGE for vt %d returned elemsize %d instead of expected %d\n",
594 if (pSafeArrayGetVartype)
596 hres = pSafeArrayGetVartype(
a, &
vt);
610 if (pSafeArrayGetVartype) {
611 hres = pSafeArrayGetVartype(
c, &
vt);
634 ok(
a !=
NULL,
"SAC failed.\n");
641 ok(
hres==
S_OK,
"CTE VT_ARRAY|VT_UI1 -> VT_BSTR failed with %lx\n",
hres);
642 ok(
V_VT(&
v) ==
VT_BSTR,
"CTE VT_ARRAY|VT_UI1 -> VT_BSTR did not return VT_BSTR, but %d.v\n",
V_VT(&
v));
643 ok(
V_BSTR(&
v)[0] == 0x6548,
"First letter are not 'He', but %x\n",
V_BSTR(&
v)[0]);
650 ok(
hres==
S_OK,
"CTE VT_BSTR -> VT_UI1|VT_ARRAY failed with %lx\n",
hres);
657 ok(
a!=
NULL,
"SAC should not fail\n");
672 ok(
hres ==
S_OK,
"SAUD failed after lock/destroy test\n");
675 ok(
hres ==
S_OK,
"SAD failed after lock/destroy test\n");
679 ok(
a!=
NULL,
"SAC should not fail\n");
681 ok(
hres ==
S_OK,
"SADD with data in array failed with hres %lx\n",
hres);
692 ok(
hres ==
S_OK,
"Failed to allocate array descriptor, hr %#lx.\n",
hres);
693 ok((
a->fFeatures & FADF_HAVEIID) == 0,
"Unexpected features mask %#x.\n",
a->fFeatures);
700 if (!pSafeArrayAllocDescriptorEx)
706 ok(
hres ==
S_OK,
"SafeArrayAllocDescriptorEx gave hres 0x%lx\n",
hres);
707 ok(
a->fFeatures ==
vttypes[
i].expflags,
"SAADE(%d) resulted with flags %x, expected %x\n",
vttypes[
i].vt,
a->fFeatures,
vttypes[
i].expflags);
708 if (
a->fFeatures & FADF_HAVEIID) {
728 if (
a->fFeatures & FADF_RECORD) {
731 if (
a->fFeatures & FADF_HAVEVARTYPE) {
735 hres = pSafeArrayGetVartype(
a, &
vt);
740 ok(
vt ==
VT_UNKNOWN,
"SAGVT of array with VT_DISPATCH returned not VT_UNKNOWN, but %d\n",
vt);
745 if (
a->fFeatures & FADF_HAVEIID) {
750 ok(
IsEqualGUID(&iid, &IID_IStorage),
"returned iid is not IID_IStorage\n");
781 for (
i = 5;
i <= 65535;
i += 30)
796 if (!pSafeArrayAllocDescriptorEx)
808 hres = pSafeArrayAllocDescriptorEx(-1, 1, &
sa);
811 sa->rgsabound[0].cElements = 0;
812 sa->rgsabound[0].lLbound = 1;
829 for (dimension = 0; dimension <
ARRAY_SIZE(sab); dimension++)
841 ok(!
sa,
"Max bounds didn't fail\n");
843 memset(sab, 0,
sizeof(sab));
847 for (dimension = 0; dimension <
ARRAY_SIZE(sab); dimension++)
848 sab[dimension].cElements = 8;
851 for (dimension = 1; dimension < 4; dimension++)
860 ok(
sa !=
NULL,
"VARTYPE %d (@%d dimensions) failed\n",
vt, dimension);
863 "VARTYPE %d (@%d dimensions) succeeded!\n",
vt, dimension);
868 "VARTYPE %d (@%d dimensions) cDims is %d, expected %d\n",
871 "VARTYPE %d (@%d dimensions) cbElements is %d, expected %ld\n",
876 ok((
sa->fFeatures & FADF_HAVEIID) == 0,
877 "Non interface type should not have FADF_HAVEIID\n");
884 ok(
sa->fFeatures & FADF_HAVEVARTYPE,
885 "Non interface type should have FADF_HAVEVARTYPE\n");
886 if (pSafeArrayGetVartype)
888 hres = pSafeArrayGetVartype(
sa, &aVt);
890 "Non interface type %d: bad type %d, hres %lx\n",
vt, aVt,
hres);
896 ok(
sa->fFeatures & FADF_HAVEIID,
"Interface type should have FADF_HAVEIID\n");
899 ok((
sa->fFeatures & FADF_HAVEVARTYPE) == 0,
900 "Interface type %d should not have FADF_HAVEVARTYPE\n",
vt);
904 ok(
hres ==
S_OK,
"Lock VARTYPE %d (@%d dimensions) failed; hres 0x%lx\n",
919 ok(
hres ==
S_OK,
"Unlock VARTYPE %d (@%d dims) hres 0x%lx\n",
923 ok(
hres ==
S_OK,
"destroy VARTYPE %d (@%d dims) hres 0x%lx\n",
939 ok(
sa !=
NULL,
"SACV with 0 elements failed.\n");
963 "VARTYPE %d (@%d elements) cbElements is %d, expected %ld\n",
967 ok(
hres ==
S_OK,
"Lock VARTYPE %d (@%d elements) failed; hres 0x%lx\n",
973 ok(
hres ==
S_OK,
"Unlock VARTYPE %d (@%d elements) failed; hres 0x%lx\n",
977 ok(
hres ==
S_OK,
"destroy VARTYPE %d (@%d elements) failed; hres 0x%lx\n",
999 for (dimension = 0; dimension <
ARRAY_SIZE(sab); dimension++)
1008test_LockUnlock_Vector:
1015 bVector ?
"vector " :
"\n",
hres);
1020 bVector ?
"vector " :
"\n",
count,
hres);
1027 bVector ?
"vector " :
"\n",
count,
hres);
1034 if (bVector ==
FALSE)
1039 goto test_LockUnlock_Vector;
1049 int value = 0, gotvalue, dimension;
1051 unsigned int x,
y,
z,
a;
1053 for (dimension = 0; dimension <
ARRAY_SIZE(sab); dimension++)
1055 sab[dimension].
lLbound = dimension * 2 + 1;
1056 sab[dimension].
cElements = dimension * 3 + 1;
1063 ok(
sa->cbElements ==
sizeof(
value),
"int size mismatch\n");
1131 ok(
hres ==
S_OK,
"Failed to put element at (%d,%d,%d,%d) hres 0x%lx\n",
1153 gotvalue =
value / 3;
1155 ok(
hres ==
S_OK,
"Failed to get element at (%d,%d,%d,%d) hres 0x%lx\n",
1158 ok(
value == gotvalue,
"Got value %d instead of %d at (%d,%d,%d,%d)\n",
1176 ok(
sa !=
NULL,
"failed to create array\n");
1177 ok(irec->
ref == 2,
"got %ld\n", irec->
ref);
1193 ok(irec->
ref == 1,
"got %ld\n", irec->
ref);
1204 const OLECHAR szTest[5] = {
'T',
'e',
's',
't',
'\0' };
1210 ok(
sa !=
NULL,
"BSTR test couldn't create array\n");
1214 ok(
sa->cbElements ==
sizeof(
BSTR),
"BSTR size mismatch\n");
1220 ok(
hres ==
S_OK,
"Failed to put bstr element hres 0x%lx\n",
hres);
1223 ok(
hres ==
S_OK,
"Failed to get bstr element at hres 0x%lx\n",
hres);
1272 ok(
sa !=
NULL,
"UNKNOWN test couldn't create array\n");
1276 ok(
sa->cbElements ==
sizeof(
LPUNKNOWN),
"LPUNKNOWN size mismatch\n");
1281 ok(
hres ==
S_OK,
"Failed to put bstr element hres 0x%lx\n",
hres);
1282 ok(
xtunk.ref == 2,
"Failed to increment refcount of iface.\n");
1285 ok(
xtunk.ref == 3,
"Failed to increment refcount of iface.\n");
1286 ok(
hres ==
S_OK,
"Failed to get bstr element at hres 0x%lx\n",
hres);
1288 ok(gotvalue == &
xtunk.IUnknown_iface,
"Got %p instead of %p\n", gotvalue, &
xtunk.IUnknown_iface);
1291 ok(
xtunk.ref == 2,
"Failed to decrement refcount of iface.\n");
1305 ok(
sa !=
NULL,
"VARIANT test couldn't create array\n");
1309 ok(
sa->cbElements ==
sizeof(
VARIANT),
"VARIANT size mismatch\n");
1315 ok(
hres ==
S_OK,
"Failed to put Variant I4 element hres 0x%lx\n",
hres);
1317 V_VT(&gotvalue) = 0xdead;
1319 ok(
hres ==
S_OK,
"Failed to get variant element at hres 0x%lx\n",
hres);
1323 ok(
hres ==
S_OK,
"Failed to get variant element at hres 0x%lx\n",
hres);
1339 int dimension,
size = 1,
i;
1341 for (dimension = 0; dimension <
ARRAY_SIZE(sab); dimension++)
1343 sab[dimension].
lLbound = dimension * 2 + 2;
1344 sab[dimension].
cElements = dimension * 3 + 1;
1349 ok(
sa !=
NULL,
"Copy test couldn't create array\n");
1351 ok(sacopy !=
NULL,
"Copy test couldn't create copy array\n");
1356 ok(
sa->cbElements ==
sizeof(
int),
"int size mismatch\n");
1359 for (dimension = 0; dimension <
size; dimension++)
1362 data[dimension] = dimension;
1411 ok(sacopy !=
NULL,
"Copy test couldn't create copy array\n");
1422 ok(sacopy->
fFeatures == orig && orig == FADF_HAVEVARTYPE,
"got features 0x%04x\n", sacopy->
fFeatures);
1423 sa->fFeatures &= ~feature;
1437 "got 0x%08x\n",
sa->fFeatures);
1449 ok(sacopy !=
NULL,
"Copy test couldn't create copy array\n");
1468 win_skip(
"SafeArrayCreateEx not supported\n");
1472 for (dimension = 0; dimension <
ARRAY_SIZE(sab); dimension++)
1480 ok(
sa ==
NULL,
"CreateEx NULL bounds didn't fail\n");
1484 ok(
sa !=
NULL,
"CreateEx (ITypeInfo) failed\n");
1502 ok(
sa !=
NULL,
"CreateEx (NULL) failed\n");
1516 ok(
sa !=
NULL,
"CreateEx (NULL-Unk) failed\n");
1531 ok(
sa ==
NULL,
"CreateEx (NULL-Rec) succeeded\n");
1538 ok(
sa !=
NULL,
"CreateEx (Fail Size) failed\n");
1557 ok(
sa !=
NULL,
"CreateEx (Rec) failed\n");
1561 if (
sa && pSafeArrayGetRecordInfo)
1566 hres = pSafeArrayGetRecordInfo(
sa, &saRec);
1570 IRecordInfo_Release(saRec);
1614 ok(
sa !=
NULL,
"Create() failed.\n");
1623 ok(
V_ARRAY(&
v) ==
sa,
"VariantClear: Overwrote value\n");
1626 ok(
sa !=
NULL,
"Create() failed.\n");
1655 ok(
sa !=
NULL,
"Create() failed.\n");
1666 "VariantCopy: hres 0x%lx, Type %d\n",
hres,
V_VT(&vDst));
1667 ok(
V_ARRAYREF(&vDst) == &
sa,
"VariantClear: Performed deep copy\n");
1675 "VariantCopy: hres 0x%lx, Type %d\n",
hres,
V_VT(&vDst));
1676 ok(
V_ARRAY(&vDst) !=
sa,
"VariantClear: Performed shallow copy\n");
1684 ok(
hres ==
S_OK,
"SafeArrayAllocDescriptor failed with error 0x%08lx\n",
hres);
1686 sa->cbElements = 16;
1688 ok(
hres ==
S_OK,
"SafeArrayCopy failed with error 0x%08lx\n",
hres);
1689 ok(
sa != sa2,
"SafeArrayCopy performed shallow copy\n");
1696 sa2 = (
void*)0xdeadbeef;
1698 ok(
hres ==
S_OK,
"SafeArrayCopy failed with error 0x%08lx\n",
hres);
1699 ok(!sa2,
"SafeArrayCopy didn't return NULL for output array\n");
1702 ok(
hres ==
S_OK,
"SafeArrayAllocDescriptor failed with error 0x%08lx\n",
hres);
1704 sa2 = (
void*)0xdeadbeef;
1707 "SafeArrayCopy with empty array should have failed with error E_INVALIDARG instead of 0x%08lx\n",
1709 ok(!sa2,
"SafeArrayCopy didn't return NULL for output array\n");
1718 ok(
hres ==
S_OK,
"SafeArrayAllocDescriptor failed with error 0x%08lx\n",
hres);
1719 ok(
sa->fFeatures == 0,
"got src features 0x%04x\n",
sa->fFeatures);
1720 sa->cbElements = 16;
1732 sa->fFeatures &= ~feature;
1741 "got 0x%08x\n",
sa->fFeatures);
1752#define MKARRAY(low,num,typ) sab.lLbound = low; sab.cElements = num; \
1753 sa = SafeArrayCreate(typ, 1, &sab); ok(sa != NULL, "Create() failed.\n"); \
1755 V_VT(&v) = VT_ARRAY|typ; V_ARRAY(&v) = sa; VariantInit(&v2)
1757#define MKARRAYCONT(low,num,typ) sab.lLbound = low; sab.cElements = num; \
1758 sa = SafeArrayCreate(typ, 1, &sab); if (!sa) continue; \
1759 V_VT(&v) = VT_ARRAY|typ; V_ARRAY(&v) = sa; VariantInit(&v2)
1763 static const char *szHello =
"Hello World";
1775 ok(
hres ==
S_OK,
"CTE VT_ARRAY|VT_UI1 -> VT_BSTR failed with %lx\n",
hres);
1778 ok(
V_VT(&
v2) ==
VT_BSTR,
"CTE VT_ARRAY|VT_UI1 -> VT_BSTR did not return VT_BSTR, but %d.\n",
V_VT(&
v2));
1779 ok(
strcmp((
char*)
V_BSTR(&
v2),szHello) == 0,
"Expected string '%s', got '%s'\n", szHello,
1789 ok(
sa !=
NULL,
"CreateVector() failed.\n");
1804 ok(
hres ==
S_OK,
"CTE VT_ARRAY|VT_UI1 -> VT_BSTR failed with %lx\n",
hres);
1807 ok(
V_VT(&
v) ==
VT_BSTR,
"CTE VT_ARRAY|VT_UI1 -> VT_BSTR did not return VT_BSTR, but %d.\n",
V_VT(&
v));
1808 ok(
strcmp((
char*)
V_BSTR(&
v),szHello) == 0,
"Expected string '%s', got '%s'\n", szHello,
1847 ok(
sa !=
NULL,
"CreateVector() failed.\n");
1860 ok(
sa !=
NULL,
"CreateVector() failed.\n");
1866 ok(
hres ==
S_OK,
"CTE VT_ARRAY|VT_UI1->VT_ARRAY|VT_UI1 returned %lx\n",
hres);
1887 int value = 0xdeadbeef;
1895 ok(
sa !=
NULL,
"Create() failed.\n");
1896 ok(
sa->fFeatures == FADF_HAVEVARTYPE,
"got 0x%x\n",
sa->fFeatures);
1902 features = (
sa->fFeatures |= FADF_STATIC);
1903 temp_pvData =
sa->pvData;
1905 ok(
hres ==
S_OK,
"SADData FADF_STATIC failed, error code %lx.\n",
hres);
1906 ok(features ==
sa->fFeatures,
"got 0x%x\n",
sa->fFeatures);
1907 ok(
sa->pvData == temp_pvData,
"SADData FADF_STATIC: pvData=%p, expected %p (fFeatures = %d).\n",
1908 sa->pvData, temp_pvData,
sa->fFeatures);
1910 ok(
value == 0,
"Data not cleared after SADData\n");
1913 features = (
sa->fFeatures ^= FADF_STATIC);
1915 ok(
hres ==
S_OK,
"SADData !FADF_STATIC failed, error code %lx.\n",
hres);
1916 ok(features ==
sa->fFeatures,
"got 0x%x\n",
sa->fFeatures);
1917 ok(
sa->pvData ==
NULL,
"SADData !FADF_STATIC: pvData=%p, expected NULL.\n",
sa->pvData);
1929 ok(
sa !=
NULL,
"Create() failed.\n");
1930 ok(
sa->fFeatures == FADF_HAVEVARTYPE,
"got 0x%x\n",
sa->fFeatures);
1932 features =
sa->fFeatures;
1935 ok(features ==
sa->fFeatures,
"got 0x%x\n",
sa->fFeatures);
1942 ok(
sa->fFeatures == 0,
"got 0x%x\n",
sa->fFeatures);
1946 ok(
sa->fFeatures == 0,
"got 0x%x\n",
sa->fFeatures);
1953 ok(
sa->fFeatures == 0,
"got 0x%x\n",
sa->fFeatures);
1957 ok(
sa->fFeatures == 0,
"got 0x%x\n",
sa->fFeatures);
1967 ok(
sa->pvData !=
NULL,
"got %p\n",
sa->pvData);
1971 ok(
sa->fFeatures == FADF_HAVEVARTYPE,
"got 0x%x\n",
sa->fFeatures);
2017 ok(*dwptr ==
VT_UI1,
"got %ld\n", *dwptr);
2027 ok(
sa !=
NULL,
"failed to create array\n");
2049 ok(!!
sa,
"Failed to create an array.\n");
2059 ok(!!
sa,
"Failed to create an array.\n");
2060 ok(
sa->cbElements ==
sizeof(
IUnknown *),
"Unexpected element size.\n");
2066 ok(
xtunk.ref == 2,
"Failed to increment refcount of iface.\n");
2070 ok(
xtunk.ref == 1,
"Failed to decrement refcount\n");
2078 ok(!!
sa,
"Failed to create an array.\n");
2083 sa->fFeatures |= FADF_FIXEDSIZE;
2086 sa->fFeatures &= ~FADF_FIXEDSIZE;
2096 ok(!!
sa,
"Failed to create an array.\n");
static struct sockaddr_in sa
#define InterlockedIncrement
#define InterlockedDecrement
struct tagVARIANT VARIANT
#define GetProcAddress(x, y)
#define HeapFree(x, y, z)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY *psa, UINT nDim, LONG *plUbound)
HRESULT WINAPI SafeArrayDestroyDescriptor(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayGetElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData)
HRESULT WINAPI SafeArrayAccessData(SAFEARRAY *psa, void **ppvData)
HRESULT WINAPI SafeArrayUnlock(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayAllocDescriptorEx(VARTYPE vt, UINT cDims, SAFEARRAY **ppsaOut)
HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut)
UINT WINAPI SafeArrayGetDim(SAFEARRAY *psa)
SAFEARRAY *WINAPI SafeArrayCreateVector(VARTYPE vt, LONG lLbound, ULONG cElements)
HRESULT WINAPI SafeArrayGetIID(SAFEARRAY *psa, GUID *pGuid)
HRESULT WINAPI SafeArrayGetLBound(SAFEARRAY *psa, UINT nDim, LONG *plLbound)
HRESULT WINAPI SafeArrayDestroyData(SAFEARRAY *psa)
UINT WINAPI SafeArrayGetElemsize(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayAllocDescriptor(UINT cDims, SAFEARRAY **ppsaOut)
HRESULT WINAPI SafeArrayGetRecordInfo(SAFEARRAY *psa, IRecordInfo **pRinfo)
static DWORD SAFEARRAY_GetVTSize(VARTYPE vt)
HRESULT WINAPI SafeArrayPtrOfIndex(SAFEARRAY *psa, LONG *rgIndices, void **ppvData)
SAFEARRAY *WINAPI SafeArrayCreateEx(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound, LPVOID pvExtra)
HRESULT WINAPI SafeArrayLock(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
static const USHORT ignored_copy_features
HRESULT WINAPI SafeArrayRedim(SAFEARRAY *psa, SAFEARRAYBOUND *psabound)
SAFEARRAY *WINAPI SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound)
HRESULT WINAPI SafeArrayCopyData(SAFEARRAY *psaSource, SAFEARRAY *psaTarget)
HRESULT WINAPI SafeArrayAllocData(SAFEARRAY *psa)
HRESULT WINAPI SafeArraySetIID(SAFEARRAY *psa, REFGUID guid)
HRESULT WINAPI SafeArrayGetVartype(SAFEARRAY *psa, VARTYPE *pvt)
HRESULT WINAPI SafeArrayPutElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLint GLint GLint GLint GLint GLint y
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLuint GLuint GLsizei GLenum const GLvoid * indices
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLfloat GLfloat GLfloat v2
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define memcpy(s1, s2, n)
static void test_SafeArrayGetPutElement_VARIANT(void)
static void test_SafeArrayDestroyData(void)
static ULONG WINAPI tunk_Release(IUnknown *punk)
static void test_LockUnlock(void)
static struct @1847 vttypes[]
static HRESULT WINAPI RecordInfo_RecordCreateCopy(IRecordInfo *iface, PVOID pvSource, PVOID *ppvDest)
static void test_SafeArrayClear(void)
const USHORT FADF_CREATEVECTOR
static ULONG WINAPI RecordInfo_Release(IRecordInfo *iface)
struct IRecordInfoImpl IRecordInfoImpl
static void test_SafeArrayCreateEx(void)
static IRecordInfoImpl * impl_from_IRecordInfo(IRecordInfo *iface)
static HRESULT WINAPI RecordInfo_RecordDestroy(IRecordInfo *iface, PVOID pvRecord)
static HRESULT WINAPI RecordInfo_GetFieldNames(IRecordInfo *iface, ULONG *pcNames, BSTR *rgBstrNames)
static struct xtunk_impl xtunk
static void test_safearray_layout(void)
static HRESULT WINAPI RecordInfo_GetTypeInfo(IRecordInfo *iface, ITypeInfo **ppTypeInfo)
static void test_SafeArrayCreateLockDestroy(void)
static void test_SafeArrayGetPutElement_BSTR(void)
#define VARTYPE_NOT_SUPPORTED
static ULONG WINAPI RecordInfo_AddRef(IRecordInfo *iface)
static void test_SafeArrayGetPutElement_IUnknown(void)
static const IRecordInfoVtbl RecordInfoVtbl
static HRESULT WINAPI RecordInfo_RecordClear(IRecordInfo *iface, PVOID pvExisting)
static BOOL WINAPI RecordInfo_IsMatchingType(IRecordInfo *iface, IRecordInfo *info2)
static const IUnknownVtbl xtunk_vtbl
static void test_SafeArrayCopyData(void)
static HRESULT WINAPI RecordInfo_GetSize(IRecordInfo *iface, ULONG *size)
static HRESULT WINAPI RecordInfo_GetGuid(IRecordInfo *iface, GUID *pguid)
static PVOID WINAPI RecordInfo_RecordCreate(IRecordInfo *iface)
static HRESULT WINAPI RecordInfo_GetField(IRecordInfo *iface, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField)
static HRESULT WINAPI tunk_QueryInterface(IUnknown *punk, REFIID riid, void **x)
static HRESULT WINAPI RecordInfo_GetFieldNoCopy(IRecordInfo *iface, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField, PVOID *ppvDataCArray)
static void test_SafeArrayChangeTypeEx(void)
static void test_SafeArrayRedim(void)
static HRESULT WINAPI RecordInfo_GetName(IRecordInfo *iface, BSTR *pbstrName)
#define MKARRAY(low, num, typ)
static ULONG WINAPI tunk_AddRef(IUnknown *punk)
static void test_SafeArrayAllocDestroyDescriptor(void)
static HRESULT WINAPI RecordInfo_QueryInterface(IRecordInfo *iface, REFIID riid, void **obj)
static void test_VectorCreateLockDestroy(void)
static HRESULT WINAPI RecordInfo_RecordInit(IRecordInfo *iface, PVOID pvNew)
static void test_safearray(void)
static HRESULT WINAPI RecordInfo_PutField(IRecordInfo *iface, ULONG wFlags, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField)
static HRESULT WINAPI RecordInfo_RecordCopy(IRecordInfo *iface, PVOID pvExisting, PVOID pvNew)
static IRecordInfoImpl * IRecordInfoImpl_Construct(void)
static void test_SafeArrayGetPutElement(void)
static HRESULT WINAPI RecordInfo_PutFieldNoCopy(IRecordInfo *iface, ULONG wFlags, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField)
static void check_for_VT_INT_PTR(void)
static SAFEARRAY **static VARTYPE *static IRecordInfo **static SAFEARRAY *WINAPI * pSafeArrayCreateEx(VARTYPE, UINT, SAFEARRAYBOUND *, LPVOID)
static void test_SafeArrayCopy(void)
INTERNETFEATURELIST feature
unsigned __int3264 UINT_PTR
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
BSTR WINAPI SysAllocString(LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
static __inline const char * wine_dbgstr_guid(const GUID *id)
IRecordInfo IRecordInfo_iface
#define CONTAINING_RECORD(address, type, field)
HRESULT WINAPI VariantChangeTypeEx(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, VARIANTARG *pvargSrc)
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
#define DISP_E_ARRAYISLOCKED
#define DISP_E_BADVARTYPE
#define DISP_E_TYPEMISMATCH