258{
259#ifdef __REACTOS__
261#endif
263#ifdef __REACTOS__
265#else
267#endif
277 int expected_bstr_size;
280
283
286
304
306
309 ok(lpsa2 !=
NULL,
"LPSAFEARRAY didn't unmarshal\n");
310 if (pSafeArrayGetVartype)
311 {
312 pSafeArrayGetVartype(lpsa, &
vt);
313 pSafeArrayGetVartype(lpsa2, &vt2);
314 ok(
vt == vt2,
"vts differ %x %x\n",
vt, vt2);
315 }
316 ok(lpsa2->
cLocks == 0,
"got lock count %u, expected 0\n", lpsa2->
cLocks);
319 ok(!lpsa2,
"lpsa2 was not set to 0 by LPSAFEARRAY_UserFree\n");
324
325
330
333
351
353
356 ok(lpsa2 !=
NULL,
"LPSAFEARRAY didn't unmarshal\n");
357 if (pSafeArrayGetVartype)
358 {
359 pSafeArrayGetVartype(lpsa, &
vt);
360 pSafeArrayGetVartype(lpsa2, &vt2);
361 ok(
vt == vt2,
"vts differ %x %x\n",
vt, vt2);
362 }
363 ok(lpsa2->
cLocks == 0,
"got lock count %u, expected 0\n", lpsa2->
cLocks);
370
371
373
383
386 ok(lpsa2 ==
NULL,
"NULL LPSAFEARRAY didn't unmarshal\n");
390
393
395 *(
double *)lpsa->
pvData = 3.1415;
396
400 expected = (44 + 1 + (
sizeof(
double) - 1)) & ~(
sizeof(
double) - 1);
415
417
422
423
431
432 if (pSafeArrayGetVartype)
433 {
434 hr = pSafeArrayGetVartype(lpsa, &
vt);
436 }
437
455
456
459
461 expected_bstr_size = 0;
463 {
466 for (
j = 0;
j <=
i;
j++)
472 ok(
hr ==
S_OK,
"Failed to put bstr element hr 0x%x\n",
hr);
473 expected_bstr_size += (
j *
sizeof(
WCHAR)) + (3 *
sizeof(
DWORD));
475 expected_bstr_size +=
sizeof(
WCHAR);
476 }
477
495
497
503 ok(lpsa2 !=
NULL,
"LPSAFEARRAY didn't unmarshal, result %p\n",
next);
504
506 {
508
509 if (lpsa2)
510 {
513 ok(
hr ==
S_OK,
"Failed to get bstr element at hres 0x%x\n",
hr);
515 {
516 if (pVarBstrCmp)
519 }
520 }
521
523 }
524
527
531
532
541
542 if (pSafeArrayGetVartype)
543 {
544 hr = pSafeArrayGetVartype(lpsa, &
vt);
546 }
547
567
568#ifdef __REACTOS__
569
572
574
575
576
577
578
581 {
584
588
590 heap_unknown[
i] = unk;
592 ok(
hr ==
S_OK,
"Failed to put unknown element hr 0x%x\n",
hr);
593 ok(unk->
refs == 2,
"VT_UNKNOWN safearray elem %d, refcount %d\n",
i, unk->
refs);
594
598 }
599
603 "size should be at least %u bytes, not %u\n",
expected,
size);
604
608 "size should be %u bytes, not %u\n",
size + (
ULONG)
sizeof(
DWORD), size2);
609
617 ok(heap_unknown[0]->refs == 3,
"Unexpected refcount %d\n", heap_unknown[0]->refs);
618
623 ok(lpsa2 !=
NULL,
"LPSAFEARRAY didn't unmarshal, result %p\n",
next);
624
626 {
628
629 if (lpsa2)
630 {
633 ok(
hr ==
S_OK,
"Failed to get unk element at %d, hres 0x%x\n",
i,
hr);
635 {
636 ok(gotvalue == &heap_unknown[
i]->IUnknown_iface,
"Interface %d mismatch, expected %p, got %p\n",
637 i, &heap_unknown[
i]->IUnknown_iface, gotvalue);
638 IUnknown_Release(gotvalue);
639 }
640 }
641 }
642
645
646
649 ok(
hr ==
S_OK,
"Failed to put unknown element hr 0x%x\n",
hr);
650
653 {
655
659 }
660
664 "size should be at least %u bytes, not %u\n",
expected,
size);
665
669 "size should be %u bytes, not %u\n",
size + (
ULONG)
sizeof(
DWORD), size2);
670
677
682 ok(lpsa2 !=
NULL,
"LPSAFEARRAY didn't unmarshal, result %p\n",
next);
683
685 {
687
688 if (lpsa2)
689 {
692 ok(
hr ==
S_OK,
"Failed to get unk element at %d, hres 0x%x\n",
i,
hr);
694 {
695
697 ok(gotvalue ==
NULL,
"Interface %d expected NULL, got %p\n",
i, gotvalue);
698 else
699 {
700 ok(gotvalue == &heap_unknown[
i]->IUnknown_iface,
"Interface %d mismatch, expected %p, got %p\n",
701 i, &heap_unknown[
i]->IUnknown_iface, gotvalue);
702 IUnknown_Release(gotvalue);
703 }
704 }
705 }
706 IUnknown_Release(&heap_unknown[
i]->IUnknown_iface);
707 }
708
711
712 ok(heap_unknown[0]->refs == 1,
"Unexpected refcount %d\n", heap_unknown[0]->refs);
713
716#endif
717}
struct tagVARIANT VARIANT
struct tagSAFEARRAYBOUND SAFEARRAYBOUND
HRESULT WINAPI SafeArrayDestroyDescriptor(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayGetElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData)
HRESULT WINAPI SafeArrayDestroyData(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayAllocDescriptor(UINT cDims, SAFEARRAY **ppsaOut)
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
SAFEARRAY *WINAPI SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound)
HRESULT WINAPI SafeArrayAllocData(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayPutElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData)
unsigned char *WINAPI LPSAFEARRAY_UserMarshal(ULONG *pFlags, unsigned char *Buffer, LPSAFEARRAY *ppsa)
ULONG WINAPI LPSAFEARRAY_UserSize(ULONG *pFlags, ULONG StartingSize, LPSAFEARRAY *ppsa)
ULONG WINAPI VARIANT_UserSize(ULONG *pFlags, ULONG Start, VARIANT *pvar)
unsigned char *WINAPI LPSAFEARRAY_UserUnmarshal(ULONG *pFlags, unsigned char *Buffer, LPSAFEARRAY *ppsa)
void WINAPI LPSAFEARRAY_UserFree(ULONG *pFlags, LPSAFEARRAY *ppsa)
GLuint GLuint GLsizei GLenum const GLvoid * indices
GLboolean GLenum GLenum GLvoid * values
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 GLint GLint j
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
static void check_safearray(void *buffer, LPSAFEARRAY lpsa)
static const IUnknownVtbl HeapUnknown_Vtbl