41#include "test_simple.h"
43#define expect_eq(expr, value, type, format) { type _ret = (expr); ok((value) == _ret, #expr " expected " format " got " format "\n", value, _ret); }
44#define expect_int(expr, value) expect_eq(expr, (int)(value), int, "%d")
45#define expect_hex(expr, value) expect_eq(expr, (int)(value), int, "0x%x")
46#define expect_null(expr) expect_eq(expr, NULL, const void *, "%p")
47#define expect_guid(expected, guid) { ok(IsEqualGUID(expected, guid), "got wrong guid %s\n", wine_dbgstr_guid(guid)); }
49#define expect_wstr_acpval(expr, value) \
52 expect_eq(!WideCharToMultiByte(CP_ACP, 0, (expr), -1, buf, 260, NULL, NULL), 0, int, "%d"); \
53 ok(value && strcmp(value, buf) == 0, #expr " expected \"%s\" got \"%s\"\n", value, buf); \
56#define ole_expect(expr, expect) { \
58 ok(r == (expect), #expr " returned %lx, expected %s (%lx)\n", r, #expect, expect); \
61#define ole_check(expr) ole_expect(expr, S_OK);
63#define ok_ole_success(hr, func) ok(hr == S_OK, #func " failed with error %#08lx\n", hr)
67#elif defined __aarch64__ || defined__arm64ec__
69#elif defined __x86_64__
77#define EXPECT_REF(obj,ref) _expect_ref((IUnknown*)obj, ref, __LINE__)
82 rc = IUnknown_Release(
obj);
83 ok_(__FILE__,
line)(rc ==
ref,
"expected refcount %ld, got %ld\n",
ref, rc);
92static const WCHAR wszStdOle2[] = {
's',
't',
'd',
'o',
'l',
'e',
'2',
'.',
't',
'l',
'b',0};
143 ok(0,
"unexpected call\n");
150 ok(0,
"unexpected call\n");
157 ok(0,
"unexpected call\n");
164 if(dispid != DISPID_VALUE) {
165 ok(0,
"unexpected call\n");
170 ok(dispparams !=
NULL,
"dispparams == NULL\n");
171 ok(!dispparams->rgdispidNamedArgs,
"dispparams->rgdispidNamedArgs != NULL\n");
172 ok(dispparams->cArgs == 1,
"dispparams->cArgs = %d\n", dispparams->cArgs);
173 ok(!dispparams->cNamedArgs,
"dispparams->cNamedArgs = %d\n", dispparams->cNamedArgs);
174 ok(
V_VT(dispparams->rgvarg) ==
VT_I4,
"V_VT(dispparams->rgvarg) = %d\n",
V_VT(dispparams->rgvarg));
175 ok(
V_I4(dispparams->rgvarg) == 7,
"V_I4(dispparams->rgvarg) = %ld\n",
V_I4(dispparams->rgvarg));
186 ok(0,
"unexpected call\n");
228 ok(0,
"unexpected call\n");
235 ok(0,
"unexpected call\n");
242 ok(0,
"unexpected call\n");
249 ok(0,
"unexpected call\n");
353 pRegDeleteKeyExW = (
void*)
GetProcAddress(hadv,
"RegDeleteKeyExW");
363 trace(
"Loading type library\n");
365 ok(hRes ==
S_OK,
"Could not load type library\n");
369 hRes = ITypeLib_GetTypeInfo(iface, 1, &iti1);
370 ok(hRes ==
S_OK,
"ITypeLib_GetTypeInfo failed on index = 1\n");
371 ref_count = ITypeLib_Release(iface);
372 ok(ref_count > 0,
"ITypeLib destroyed while ITypeInfo has back pointer\n");
376 hRes = ITypeLib_GetTypeInfo(iface, 1, &iti2);
377 ok(hRes ==
S_OK,
"ITypeLib_GetTypeInfo failed on index = 1\n");
378 ok(iti1 == iti2,
"ITypeLib_GetTypeInfo returned different pointers for same indexes\n");
380 ITypeLib_AddRef(iface);
381 ITypeInfo_Release(iti2);
382 ITypeInfo_Release(iti1);
383 ok(ITypeLib_Release(iface) == 0,
"ITypeLib should be destroyed here.\n");
388 ITypeComp *pTypeComp, *tcomp, *pTypeComp_tmp;
389 ITypeInfo *pTypeInfo, *ti, *pFontTypeInfo;
395 static WCHAR wszStdFunctions[] = {
'S',
't',
'd',
'F',
'u',
'n',
'c',
't',
'i',
'o',
'n',
's',0};
396 static WCHAR wszSavePicture[] = {
'S',
'a',
'v',
'e',
'P',
'i',
'c',
't',
'u',
'r',
'e',0};
397 static WCHAR wszOLE_TRISTATE[] = {
'O',
'L',
'E',
'_',
'T',
'R',
'I',
'S',
'T',
'A',
'T',
'E',0};
398 static WCHAR wszUnchecked[] = {
'U',
'n',
'c',
'h',
'e',
'c',
'k',
'e',
'd',0};
399 static WCHAR wszIUnknown[] = {
'I',
'U',
'n',
'k',
'n',
'o',
'w',
'n',0};
400 static WCHAR wszFont[] = {
'F',
'o',
'n',
't',0};
401 static WCHAR wszStdPicture[] = {
'S',
't',
'd',
'P',
'i',
'c',
't',
'u',
'r',
'e',0};
402 static WCHAR wszOLE_COLOR[] = {
'O',
'L',
'E',
'_',
'C',
'O',
'L',
'O',
'R',0};
403 static WCHAR wszClone[] = {
'C',
'l',
'o',
'n',
'e',0};
404 static WCHAR wszclone[] = {
'c',
'l',
'o',
'n',
'e',0};
405 static WCHAR wszJunk[] = {
'J',
'u',
'n',
'k',0};
406 static WCHAR wszAddRef[] = {
'A',
'd',
'd',
'R',
'e',
'f',0};
411 hr = ITypeLib_GetTypeComp(pTypeLib, &pTypeComp);
416 hr = ITypeComp_Bind(pTypeComp, wszStdFunctions, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
419 ok(desckind == DESCKIND_TYPECOMP,
420 "desckind should have been DESCKIND_TYPECOMP instead of %d\n",
422 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
424 ITypeComp_Release(bindptr.lptcomp);
428 hr = ITypeComp_Bind(pTypeComp, wszStdFunctions, ulHash, INVOKE_PROPERTYGET, &pTypeInfo, &desckind, &bindptr);
431 ok(desckind == DESCKIND_TYPECOMP,
432 "desckind should have been DESCKIND_TYPECOMP instead of %d\n",
434 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
435 ITypeComp_Release(bindptr.lptcomp);
439 hr = ITypeComp_Bind(pTypeComp, wszSavePicture, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
442 ok(desckind == DESCKIND_FUNCDESC,
443 "desckind should have been DESCKIND_FUNCDESC instead of %d\n",
445 ok(bindptr.lpfuncdesc !=
NULL,
"bindptr.lpfuncdesc should not have been set to NULL\n");
446 ITypeInfo_ReleaseFuncDesc(pTypeInfo, bindptr.lpfuncdesc);
447 ITypeInfo_Release(pTypeInfo);
451 hr = ITypeComp_Bind(pTypeComp, wszSavePicture, ulHash, INVOKE_PROPERTYGET, &pTypeInfo, &desckind, &bindptr);
453 "ITypeComp_Bind should have failed with TYPE_E_TYPEMISMATCH instead of 0x%08lx\n",
456 ok(desckind == DESCKIND_NONE,
457 "desckind should have been DESCKIND_NONE instead of %d\n",
459 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
460 ok(!bindptr.lptcomp,
"bindptr should have been set to NULL\n");
464 hr = ITypeComp_Bind(pTypeComp, wszOLE_TRISTATE, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
467 ok(desckind == DESCKIND_TYPECOMP,
468 "desckind should have been DESCKIND_TYPECOMP instead of %d\n",
470 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
472 ITypeComp_Release(bindptr.lptcomp);
476 hr = ITypeComp_Bind(pTypeComp, wszUnchecked, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
479 ok(desckind == DESCKIND_VARDESC,
480 "desckind should have been DESCKIND_VARDESC instead of %d\n",
482 ITypeInfo_ReleaseVarDesc(pTypeInfo, bindptr.lpvardesc);
483 ITypeInfo_Release(pTypeInfo);
487 hr = ITypeComp_Bind(pTypeComp, wszIUnknown, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
490 ok(desckind == DESCKIND_NONE,
491 "desckind should have been DESCKIND_NONE instead of %d\n",
493 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
494 ok(!bindptr.lptcomp,
"bindptr should have been set to NULL\n");
498 hr = ITypeComp_Bind(pTypeComp, wszFont, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
501 ok(desckind == DESCKIND_NONE,
502 "desckind should have been DESCKIND_NONE instead of %d\n",
504 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
505 ok(!bindptr.lptcomp,
"bindptr should have been set to NULL\n");
509 hr = ITypeComp_Bind(pTypeComp,
wszGUID, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
512 ok(desckind == DESCKIND_NONE,
513 "desckind should have been DESCKIND_NONE instead of %d\n",
515 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
516 ok(!bindptr.lptcomp,
"bindptr should have been set to NULL\n");
520 hr = ITypeComp_Bind(pTypeComp, wszOLE_COLOR, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
523 ok(desckind == DESCKIND_NONE,
524 "desckind should have been DESCKIND_NONE instead of %d\n",
526 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
527 ok(!bindptr.lptcomp,
"bindptr should have been set to NULL\n");
531 hr = ITypeComp_Bind(pTypeComp, wszStdPicture, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
534 ok(desckind == DESCKIND_NONE,
535 "desckind should have been DESCKIND_NONE instead of %d\n",
537 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
538 ok(!bindptr.lptcomp,
"bindptr should have been set to NULL\n");
546 pTypeInfo = (
void*)0xdeadbeef;
547 hr = ITypeComp_BindType(pTypeComp,
wszGUID, ulHash, &pTypeInfo,
NULL);
549 ok(pTypeInfo == (
void*)0xdeadbeef,
"Got %p\n", pTypeInfo);
552 pTypeComp_tmp = (
void*)0xdeadbeef;
553 hr = ITypeComp_BindType(pTypeComp,
wszGUID, ulHash,
NULL, &pTypeComp_tmp);
555 ok(pTypeComp_tmp == (
void*)0xdeadbeef,
"Got %p\n", pTypeComp_tmp);
558 pTypeComp_tmp = (
void*)0xdeadbeef;
559 pTypeInfo = (
void*)0xdeadbeef;
560 hr = ITypeComp_BindType(pTypeComp,
NULL, ulHash, &pTypeInfo, &pTypeComp_tmp);
562 ok(pTypeInfo == (
void*)0xdeadbeef,
"Got %p\n", pTypeInfo);
563 ok(pTypeComp_tmp == (
void*)0xdeadbeef,
"Got %p\n", pTypeComp_tmp);
566 pTypeComp_tmp = (
void*)0xdeadbeef;
567 pTypeInfo = (
void*)0xdeadbeef;
568 hr = ITypeComp_BindType(pTypeComp,
wszGUID, ulHash, &pTypeInfo, &pTypeComp_tmp);
570 ok(pTypeInfo !=
NULL,
"Got NULL pTypeInfo\n");
571 todo_wine ok(pTypeComp_tmp ==
NULL,
"Got pTypeComp_tmp %p\n", pTypeComp_tmp);
572 ITypeInfo_Release(pTypeInfo);
573 if(pTypeComp_tmp) ITypeComp_Release(pTypeComp_tmp);
577 pTypeComp_tmp = (
void*)0xdeadbeef;
578 pTypeInfo = (
void*)0xdeadbeef;
579 hr = ITypeComp_BindType(pTypeComp,
wszguid, ulHash, &pTypeInfo, &pTypeComp_tmp);
581 ok(pTypeInfo !=
NULL,
"Got NULL pTypeInfo\n");
582 todo_wine ok(pTypeComp_tmp ==
NULL,
"Got pTypeComp_tmp %p\n", pTypeComp_tmp);
583 ITypeInfo_Release(pTypeInfo);
584 if(pTypeComp_tmp) ITypeComp_Release(pTypeComp_tmp);
586 ITypeComp_Release(pTypeComp);
589 hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &
IID_IFont, &pFontTypeInfo);
592 hr = ITypeInfo_GetTypeComp(pFontTypeInfo, &pTypeComp);
595 hr = ITypeInfo_QueryInterface(pFontTypeInfo, &IID_ITypeComp, (
void**)&tcomp);
597 ok(tcomp == pTypeComp,
"got %p, was %p\n", tcomp, pTypeComp);
599 hr = ITypeComp_QueryInterface(tcomp, &IID_ITypeInfo, (
void**)&ti);
601 ok(ti == pFontTypeInfo,
"got %p, was %p\n", ti, pFontTypeInfo);
602 ITypeInfo_Release(ti);
604 ITypeComp_Release(tcomp);
607 hr = ITypeComp_Bind(pTypeComp, wszClone, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
610 ok(desckind == DESCKIND_FUNCDESC,
611 "desckind should have been DESCKIND_FUNCDESC instead of %d\n",
613 ok(bindptr.lpfuncdesc !=
NULL,
"bindptr.lpfuncdesc should not have been set to NULL\n");
614 ITypeInfo_ReleaseFuncDesc(pTypeInfo, bindptr.lpfuncdesc);
615 ITypeInfo_Release(pTypeInfo);
618 hr = ITypeComp_Bind(pTypeComp, wszClone, ulHash, INVOKE_PROPERTYGET, &pTypeInfo, &desckind, &bindptr);
621 ok(desckind == DESCKIND_NONE,
622 "desckind should have been DESCKIND_NONE instead of %d\n",
624 ok(!pTypeInfo,
"pTypeInfo should have been set to NULL\n");
625 ok(!bindptr.lptcomp,
"bindptr should have been set to NULL\n");
629 hr = ITypeComp_Bind(pTypeComp, wszclone, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
632 ok(desckind == DESCKIND_FUNCDESC,
633 "desckind should have been DESCKIND_FUNCDESC instead of %d\n",
635 ok(bindptr.lpfuncdesc !=
NULL,
"bindptr.lpfuncdesc should not have been set to NULL\n");
636 ITypeInfo_ReleaseFuncDesc(pTypeInfo, bindptr.lpfuncdesc);
637 ITypeInfo_Release(pTypeInfo);
640 desckind = 0xdeadbeef;
641 bindptr.lptcomp = (
ITypeComp*)0xdeadbeef;
644 hr = ITypeComp_Bind(pTypeComp, wszJunk, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
646 ok(desckind == DESCKIND_NONE,
"desckind should have been DESCKIND_NONE, was: %d\n", desckind);
647 ok(pTypeInfo ==
NULL,
"pTypeInfo should have been NULL, was: %p\n", pTypeInfo);
648 ok(bindptr.lptcomp ==
NULL,
"bindptr should have been NULL, was: %p\n", bindptr.lptcomp);
651 desckind = 0xdeadbeef;
652 bindptr.lpfuncdesc =
NULL;
655 hr = ITypeComp_Bind(pTypeComp, wszAddRef, ulHash, 0, &pTypeInfo, &desckind, &bindptr);
657 ok(desckind == DESCKIND_FUNCDESC,
"desckind should have been DESCKIND_FUNCDESC, was: %d\n", desckind);
658 ok(pTypeInfo !=
NULL,
"pTypeInfo should not have been NULL, was: %p\n", pTypeInfo);
659 ok(bindptr.lpfuncdesc !=
NULL,
"bindptr should not have been NULL, was: %p\n", bindptr.lpfuncdesc);
660 ITypeInfo_ReleaseFuncDesc(pTypeInfo, bindptr.lpfuncdesc);
661 ITypeInfo_Release(pTypeInfo);
663 ITypeComp_Release(pTypeComp);
664 ITypeInfo_Release(pFontTypeInfo);
665 ITypeLib_Release(pTypeLib);
681 static WCHAR func1[] = {
'f',
'u',
'n',
'c',
'1',0};
682 static const WCHAR func2[] = {
'f',
'u',
'n',
'c',
'2',0};
683 static const WCHAR func3[] = {
'f',
'u',
'n',
'c',
'3',0};
684 static const WCHAR parm1[] = {
'p',
'a',
'r',
'm',
'1',0};
685 static const WCHAR parm2[] = {
'p',
'a',
'r',
'm',
'2',0};
692 methdata[0].
ppdata = parms1;
693 methdata[0].
dispid = 0x123;
694 methdata[0].
iMeth = 0;
696 methdata[0].
cArgs = 2;
706 methdata[1].
dispid = 0x124;
707 methdata[1].
iMeth = 1;
709 methdata[1].
cArgs = 0;
714 methdata[2].
ppdata = parms3;
715 methdata[2].
dispid = 0x125;
716 methdata[2].
iMeth = 3;
718 methdata[2].
cArgs = 1;
726 methdata[3].
dispid = 0x125;
727 methdata[3].
iMeth = 4;
729 methdata[3].
cArgs = 0;
736 hr = ITypeInfo_GetTypeAttr(pTypeInfo, &pTypeAttr);
739 ok(pTypeAttr->typekind ==
TKIND_COCLASS,
"typekind %0x\n", pTypeAttr->typekind);
740 ok(pTypeAttr->cImplTypes == 1,
"cImplTypes %d\n", pTypeAttr->cImplTypes);
741 ok(pTypeAttr->cFuncs == 0,
"cFuncs %d\n", pTypeAttr->cFuncs);
742 ok(pTypeAttr->wTypeFlags == 0,
"wTypeFlags %04x\n", pTypeAttr->cFuncs);
743 ITypeInfo_ReleaseTypeAttr(pTypeInfo, pTypeAttr);
745 hr = ITypeInfo_GetRefTypeOfImplType(pTypeInfo, 0, &href);
747 ok(href == 0,
"href = 0x%lx\n", href);
748 hr = ITypeInfo_GetRefTypeInfo(pTypeInfo, href, &pTI2);
750 hr = ITypeInfo_GetTypeAttr(pTI2, &pTypeAttr);
752 ok(pTypeAttr->typekind ==
TKIND_INTERFACE,
"typekind %0x\n", pTypeAttr->typekind);
753 ok(pTypeAttr->cFuncs == 4,
"cFuncs %d\n", pTypeAttr->cFuncs);
755 ok(pTypeAttr->wTypeFlags == 0,
"typeflags %08x\n", pTypeAttr->wTypeFlags);
757 ITypeInfo_ReleaseTypeAttr(pTI2, pTypeAttr);
759 hr = ITypeInfo_GetFuncDesc(pTI2, 0, &pFuncDesc);
761 ok(pFuncDesc->memid == 0x123,
"memid %lx\n", pFuncDesc->memid);
762 ok(pFuncDesc->funckind == FUNC_VIRTUAL,
"funckind %d\n", pFuncDesc->funckind);
763 ok(pFuncDesc->invkind == methdata[0].
wFlags,
"invkind %d\n", pFuncDesc->invkind);
764 ok(pFuncDesc->callconv == methdata[0].
cc,
"callconv %d\n", pFuncDesc->callconv);
765 ok(pFuncDesc->cParams == methdata[0].
cArgs,
"cParams %d\n", pFuncDesc->cParams);
766 ok(pFuncDesc->oVft == 0,
"oVft %d\n", pFuncDesc->oVft);
767 ok(pFuncDesc->wFuncFlags == 0,
"oVft %d\n", pFuncDesc->wFuncFlags);
768 ok(pFuncDesc->elemdescFunc.tdesc.vt ==
VT_HRESULT,
"ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt);
769 ok(pFuncDesc->lprgelemdescParam[0].tdesc.vt ==
VT_I4,
"parm 0 vt %x\n", pFuncDesc->lprgelemdescParam[0].tdesc.vt);
770 ok(pFuncDesc->lprgelemdescParam[0].paramdesc.wParamFlags == PARAMFLAG_NONE,
"parm 0 flags %x\n", pFuncDesc->lprgelemdescParam[0].paramdesc.wParamFlags);
772 ok(pFuncDesc->lprgelemdescParam[1].tdesc.vt ==
VT_BSTR,
"parm 1 vt %x\n", pFuncDesc->lprgelemdescParam[1].tdesc.vt);
773 ok(pFuncDesc->lprgelemdescParam[1].paramdesc.wParamFlags == PARAMFLAG_NONE,
"parm 1 flags %x\n", pFuncDesc->lprgelemdescParam[1].paramdesc.wParamFlags);
774 ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc);
776 hr = ITypeInfo_GetFuncDesc(pTI2, 1, &pFuncDesc);
778 ok(pFuncDesc->funckind == FUNC_VIRTUAL,
"funckind %d\n", pFuncDesc->funckind);
779 ok(pFuncDesc->invkind == methdata[1].
wFlags,
"invkind %d\n", pFuncDesc->invkind);
780 ok(pFuncDesc->callconv == methdata[1].
cc,
"callconv %d\n", pFuncDesc->callconv);
781 ok(pFuncDesc->cParams == methdata[1].
cArgs,
"cParams %d\n", pFuncDesc->cParams);
782 ok(pFuncDesc->oVft ==
sizeof(
void *),
"oVft %d\n", pFuncDesc->oVft);
783 ok(pFuncDesc->wFuncFlags == 0,
"oVft %d\n", pFuncDesc->wFuncFlags);
784 ok(pFuncDesc->elemdescFunc.tdesc.vt ==
VT_I4,
"ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt);
785 ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc);
787 hr = ITypeInfo_GetFuncDesc(pTI2, 2, &pFuncDesc);
789 ok(pFuncDesc->funckind == FUNC_VIRTUAL,
"funckind %d\n", pFuncDesc->funckind);
790 ok(pFuncDesc->invkind == methdata[2].
wFlags,
"invkind %d\n", pFuncDesc->invkind);
791 ok(pFuncDesc->callconv == methdata[2].
cc,
"callconv %d\n", pFuncDesc->callconv);
792 ok(pFuncDesc->cParams == methdata[2].
cArgs,
"cParams %d\n", pFuncDesc->cParams);
793 ok(pFuncDesc->oVft == 3 *
sizeof(
void *),
"oVft %d\n", pFuncDesc->oVft);
794 ok(pFuncDesc->wFuncFlags == 0,
"oVft %d\n", pFuncDesc->wFuncFlags);
795 ok(pFuncDesc->elemdescFunc.tdesc.vt ==
VT_HRESULT,
"ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt);
796 ok(pFuncDesc->lprgelemdescParam[0].tdesc.vt ==
VT_I4,
"parm 0 vt %x\n", pFuncDesc->lprgelemdescParam[0].tdesc.vt);
797 ok(pFuncDesc->lprgelemdescParam[0].paramdesc.wParamFlags == PARAMFLAG_NONE,
"parm 0 flags %x\n", pFuncDesc->lprgelemdescParam[0].paramdesc.wParamFlags);
798 ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc);
800 hr = ITypeInfo_GetFuncDesc(pTI2, 3, &pFuncDesc);
802 ok(pFuncDesc->funckind == FUNC_VIRTUAL,
"funckind %d\n", pFuncDesc->funckind);
803 ok(pFuncDesc->invkind == methdata[3].
wFlags,
"invkind %d\n", pFuncDesc->invkind);
804 ok(pFuncDesc->callconv == methdata[3].
cc,
"callconv %d\n", pFuncDesc->callconv);
805 ok(pFuncDesc->cParams == methdata[3].
cArgs,
"cParams %d\n", pFuncDesc->cParams);
806 ok(pFuncDesc->oVft == 4 *
sizeof(
void *),
"oVft %d\n", pFuncDesc->oVft);
807 ok(pFuncDesc->wFuncFlags == 0,
"oVft %d\n", pFuncDesc->wFuncFlags);
808 ok(pFuncDesc->elemdescFunc.tdesc.vt ==
VT_I4,
"ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt);
809 ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc);
812 hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &
name, 1, &memid);
814 ok(memid == 0x123,
"memid 0x%08lx\n", memid);
816 ITypeInfo_Release(pTI2);
817 ITypeInfo_Release(pTypeInfo);
839 ok(
res != 0,
"couldn't find typelib resource %d\n", res_no );
850 DISPPARAMS dp = {
args, named_args, 1, 0};
888 static WCHAR wszBogus[] = {
'b',
'o',
'g',
'u',
's',0 };
889 static WCHAR wszGetTypeInfo[] = {
'G',
'e',
't',
'T',
'y',
'p',
'e',
'I',
'n',
'f',
'o',0 };
890 static WCHAR wszClone[] = {
'C',
'l',
'o',
'n',
'e',0};
891 static WCHAR wszTestDll[] = {
't',
'e',
's',
't',
'.',
'd',
'l',
'l',0};
893 OLECHAR* pwszGetTypeInfo = wszGetTypeInfo;
896 DISPPARAMS dispparams;
897 GUID bogusguid = {0x806afb4f,0x13f7,0x42d2,{0x89,0x2c,0x6c,0x97,0xc3,0x6a,0x36,0xc1}};
898 static const GUID moduleTestGetDllEntryGuid = {0xf073cd92,0xa199,0x11ea,{0xbb,0x37,0x02,0x42,0xac,0x13,0x00,0x02}};
906 BSTR bstrDllName, bstrName;
911 count = ITypeLib_GetTypeInfoCount(pTypeLib);
915 hr = ITypeLib_GetTypeInfo(pTypeLib,
count, &pTypeInfo);
918 hr = ITypeLib_GetTypeInfo(pTypeLib, 0,
NULL);
921 hr = ITypeLib_GetLibAttr(pTypeLib,
NULL);
924 hr = ITypeLib_GetTypeInfoType(pTypeLib,
count, &kind);
927 hr = ITypeLib_GetTypeInfoType(pTypeLib,
count,
NULL);
930 hr = ITypeLib_GetTypeInfoType(pTypeLib, 0,
NULL);
933 hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &
IID_IFont, &pTypeInfo);
937 hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &bogus, 1, &dispidMember);
939 "ITypeInfo_GetIDsOfNames should have returned DISP_E_UNKNOWNNAME instead of 0x%08lx\n",
942 dispparams.cArgs = 0;
943 dispparams.rgdispidNamedArgs =
NULL;
944 dispparams.rgvarg =
NULL;
949 dispparams.cNamedArgs = 0;
957 dispparams.cNamedArgs = 1;
959 ok(
hr ==
E_INVALIDARG,
"ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08lx\n",
hr);
962 ok(
hr ==
E_INVALIDARG,
"ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08lx\n",
hr);
965 hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &pwszClone, 1, &dispidMember);
969 dispparams.cNamedArgs = 0;
977 dispparams.cNamedArgs = 1;
979 ok(
hr ==
E_INVALIDARG,
"ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08lx\n",
hr);
982 ok(
hr ==
E_INVALIDARG,
"ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08lx\n",
hr);
987 dispparams.cNamedArgs = 0;
989 ok(
hr ==
E_INVALIDARG,
"ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08lx\n",
hr);
992 ok(
hr ==
E_INVALIDARG,
"ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08lx\n",
hr);
995 dispparams.cNamedArgs = 1;
997 ok(
hr ==
E_INVALIDARG,
"ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08lx\n",
hr);
1000 ok(
hr ==
E_INVALIDARG,
"ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08lx\n",
hr);
1002 ITypeInfo_Release(pTypeInfo);
1004 hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &
IID_IDispatch, &pTypeInfo);
1007 hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &pwszGetTypeInfo, 1, &dispidMember);
1010 hr = ITypeInfo_QueryInterface(pTypeInfo, &IID_ITypeInfo2, (
void**)&pTypeInfo2);
1020 hr = ITypeInfo2_GetCustData(pTypeInfo2, &bogusguid, &
var);
1024 ITypeInfo2_Release(pTypeInfo2);
1031 hr = ITypeInfo_GetTypeAttr(pTypeInfo, &
attr);
1033 ok(
attr->cbSizeInstance ==
sizeof(
void*),
"got size %ld\n",
attr->cbSizeInstance);
1035 ITypeInfo_ReleaseTypeAttr(pTypeInfo,
attr);
1038 hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_IEnumVARIANT, &ti);
1040 hr = ITypeInfo_GetTypeAttr(ti, &
attr);
1042 ok(
attr->cbSizeInstance ==
sizeof(
void*),
"got size %ld\n",
attr->cbSizeInstance);
1043 ITypeInfo_ReleaseTypeAttr(ti,
attr);
1044 ITypeInfo_Release(ti);
1049 dispparams.cNamedArgs = 0;
1057 dispparams.cNamedArgs = 1;
1067 dispparams.cNamedArgs = 0;
1075 dispparams.cNamedArgs = 1;
1082 ITypeInfo_Release(pTypeInfo);
1083 ITypeLib_Release(pTypeLib);
1090 hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &moduleTestGetDllEntryGuid, &pTypeInfo);
1092 ok(pTypeInfo !=
NULL,
"got NULL typeinfo\n");
1095 hr = ITypeInfo_GetDllEntry(pTypeInfo, 0x6000000d, INVOKE_FUNC, &bstrDllName, &bstrName, &ordinal);
1098 hr = ITypeInfo_GetDllEntry(pTypeInfo, 0x6000000d, INVOKE_PROPERTYPUTREF, &bstrDllName, &bstrName, &ordinal);
1102 hr = ITypeInfo_GetDllEntry(pTypeInfo, 0x6000000d, INVOKE_PROPERTYGET, &bstrDllName, &bstrName, &ordinal);
1105 hr = ITypeInfo_GetDllEntry(pTypeInfo, 0x6000000d, INVOKE_PROPERTYPUT, &bstrDllName, &bstrName, &ordinal);
1109 hr = ITypeInfo_GetDllEntry(pTypeInfo, 0x60000000, INVOKE_FUNC, &bstrDllName, &bstrName, &ordinal);
1112 hr = ITypeInfo_GetDllEntry(pTypeInfo, 0x60000000, INVOKE_PROPERTYPUTREF, &bstrDllName, &bstrName, &ordinal);
1116 hr = ITypeInfo_GetDllEntry(pTypeInfo, 0x60000000, INVOKE_PROPERTYGET, &bstrDllName, &bstrName, &ordinal);
1120 ok(ordinal == 1,
"got ordinal: %04x\n", ordinal);
1123 hr = ITypeInfo_GetDllEntry(pTypeInfo, 0x60000000, INVOKE_PROPERTYPUT, &bstrDllName, &bstrName, &ordinal);
1127 ok(ordinal == 2,
"got ordinal: %04x\n", ordinal);
1130 ITypeInfo_Release(pTypeInfo);
1132 hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_IInvokeTest, &pTypeInfo);
1135 dispparams.cArgs = 1;
1136 dispparams.cNamedArgs = 0;
1137 dispparams.rgdispidNamedArgs =
NULL;
1138 dispparams.rgvarg =
args;
1172 dispparams.cArgs = 1;
1173 dispparams.rgvarg =
args;
1189 dispidMember = DISPID_PROPERTYPUT;
1190 dispparams.cArgs = 1;
1191 dispparams.cNamedArgs = 1;
1192 dispparams.rgdispidNamedArgs = &dispidMember;
1193 dispparams.rgvarg =
args;
1234 dispparams.cNamedArgs = 0;
1237 dispparams.cArgs = 1;
1242 dispparams.cArgs = 0;
1247 dispparams.cArgs = 1;
1252 dispparams.cArgs = 0;
1257 dispparams.cArgs = 1;
1262 dispparams.cArgs = 0;
1267 dispparams.cArgs = 1;
1272 dispparams.cArgs = 0;
1277 dispparams.cArgs = 1;
1282 dispparams.cArgs = 0;
1287 dispparams.cArgs = 1;
1292 dispparams.cArgs = 2;
1297 dispparams.cArgs = 3;
1302 dispparams.cArgs = 0;
1307 dispparams.cArgs = 1;
1312 dispparams.cArgs = 2;
1317 dispparams.cArgs = 3;
1322 dispparams.cArgs = 0;
1327 dispparams.cArgs = 1;
1332 dispparams.cArgs = 2;
1337 dispparams.cArgs = 3;
1342 dispparams.cArgs = 0;
1347 dispparams.cArgs = 1;
1352 dispparams.cArgs = 2;
1357 dispparams.cArgs = 3;
1363 dispidMember = DISPID_PROPERTYPUT;
1364 dispparams.cArgs = 1;
1365 dispparams.cNamedArgs = 1;
1366 dispparams.rgdispidNamedArgs = &dispidMember;
1372 ITypeInfo_Release(pTypeInfo);
1373 ITypeLib_Release(pTypeLib);
1379 ok( a0 == 1,
"wrong arg0 %x\n", a0 );
1380 ok(
a1 == -1,
"wrong arg1 %x\n",
a1 );
1382 ok(
a2 == 1234,
"wrong arg2 %x\n",
a2 );
1384 ok(
a2 == (0x55550000 | 1234),
"wrong arg2 %x\n",
a2 );
1386 ok(
a3 == 0xdeadbeef,
"wrong arg3 %x\n",
a3 );
1387 ok(
a4 == 0x555555fd,
"wrong arg4 %x\n",
a4 );
1393 ok( a0 == 1.2,
"wrong arg0 %f\n", a0 );
1394 ok(
a1 == 3.25,
"wrong arg1 %f\n", (
double)
a1 );
1395 ok(
a2 == 1.2e12,
"wrong arg2 %f\n",
a2);
1396 ok(
a3 == -4433.0,
"wrong arg3 %f\n", (
double)
a3 );
1402 ok( a0 == 0xdead00000000beefll,
"wrong arg0 %#I64x\n", a0);
1403 ok(
a1.int64 == ((
ULONGLONG)10000 * 12345678),
"wrong arg1 %#I64x\n",
a1.int64 );
1410 ok( a0 == 2233,
"wrong arg0 %x\n", a0 );
1411 ok(
a1 == 1 ||
broken(
a1 == 0x55550001),
"wrong arg1 %x\n",
a1 );
1414 ok(
a2.Hi32 == 1122,
"wrong arg2.Hi32 %lx\n",
a2.Hi32 );
1415 ok(
a2.Lo64 == 3344,
"wrong arg2.Lo64 %#I64x\n",
a2.Lo64 );
1424 ok( a0 == 1111,
"wrong arg0 %x\n", a0 );
1425 ok(
a1 == 0,
"wrong arg1 %x\n",
a1 );
1427 ok( a0 == 0x55555555,
"wrong arg0 %x\n", a0 );
1428 ok(
a1 == 1111,
"wrong arg1 %x\n",
a1 );
1440 ok( (*(
void ***)inst)[3] ==
inst_func,
"wrong ptr %p\n", inst );
1441 ok(
a == 3,
"wrong arg %x\n",
a );
1471 ok( (*(
void ***)inst)[3] ==
inst_func2,
"wrong ptr %p\n", inst );
1485 ok( (*(
void ***)inst)[3] ==
inst_func2,
"wrong ptr %p\n", inst );
1512 for (
i = 0;
i < 5;
i++) pargs[
i] = &
args[
i];
1583 V_I8(&
args[0]) = 0xdead00000000beefll;
1589 "DispCallFunc failed %lx\n",
res );
1658 DWORD dwMaxSubkeyLen, dwMaxValueLen;
1676 dwMaxLen =
max(dwMaxSubkeyLen, dwMaxValueLen);
1699 if (pRegDeleteKeyExW &&
view != 0)
1700 ret = pRegDeleteKeyExW(
hKey, lpszSubKey,
view, 0);
1715 if (lpszName != szNameBuf)
1724 static const WCHAR typelibW[] = {
'T',
'y',
'p',
'e',
'l',
'i',
'b',
'\\',0};
1725 static const WCHAR formatW[] = {
'\\',
'%',
'x',
'.',
'%',
'x',
'\\',
'0',
'\\',
'w',
'i',
'n',
'%',
'u',0};
1726 static const WCHAR format2W[] = {
'%',
's',
'_',
'%',
'u',
'_',
'%',
'u',
'.',
'd',
'l',
'l',0};
1732 memcpy(
buf, typelibW,
sizeof(typelibW));
1748 win_skip(
"W-calls are not implemented\n");
1754 trace(
"RegCreateKeyExW failed: %lu\n",
res);
1762 trace(
"RegSetValueExW failed\n");
1778 { 3, 0,
S_OK, {
'f',
'a',
'k',
'e',
'_',
'3',
'_',
'0',
'.',
'd',
'l',
'l',0 } },
1779 { 3, 1,
S_OK, {
'f',
'a',
'k',
'e',
'_',
'3',
'_',
'1',
'.',
'd',
'l',
'l',0 } },
1780 { 3, 22,
S_OK, {
'f',
'a',
'k',
'e',
'_',
'3',
'_',
'3',
'7',
'.',
'd',
'l',
'l',0 } },
1781 { 3, 37,
S_OK, {
'f',
'a',
'k',
'e',
'_',
'3',
'_',
'3',
'7',
'.',
'd',
'l',
'l',0 } },
1783 { 0xffff, 0xffff,
S_OK, {
'f',
'a',
'k',
'e',
'_',
'5',
'_',
'3',
'7',
'.',
'd',
'l',
'l',0 } },
1789 static const WCHAR base[] = {
'f',
'a',
'k',
'e',0};
1790 static const WCHAR wrongW[] = {
'w',
'r',
'o',
'n',
'g',0};
1815 "QueryPathOfRegTypeLib(%u.%u) returned %08lx\n", td[
i].maj, td[
i].
min,
ret);
1818 if (
i == 6 && arch == (
is_win64 ? 32 : 64))
1819 ok( !
lstrcmpW(
path,
L"wrong_5_37.dll" ),
"typelib %u.%u path doesn't match: %s\n",
1851 hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF3, &pTI);
1854 hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
1857 ok(pTA->cbSizeVft == 7 *
sizeof(
void *),
"sizevft %d\n", pTA->cbSizeVft);
1858 ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE,
"typeflags %x\n", pTA->wTypeFlags);
1859 ok(pTA->cFuncs == 6,
"cfuncs %d\n", pTA->cFuncs);
1860 ok(pTA->cImplTypes == 1,
"cimpltypes %d\n", pTA->cImplTypes);
1861 ITypeInfo_ReleaseTypeAttr(pTI, pTA);
1863 hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
1865 hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
1867 hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
1870 ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
1871 ITypeInfo_Release(pTI_p);
1874 hr = ITypeInfo_GetFuncDesc(pTI, 6, &pFD);
1876 hr = ITypeInfo_GetFuncDesc(pTI, 5, &pFD);
1878 ok(pFD->memid == 0x60020000,
"memid %08lx\n", pFD->memid);
1879 ok(pFD->oVft == 5 *
sizeof(
void *),
"oVft %d\n", pFD->oVft);
1880 ITypeInfo_ReleaseFuncDesc(pTI, pFD);
1881 ITypeInfo_Release(pTI);
1885 hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF4, &pTI);
1888 hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
1891 ok(pTA->cbSizeVft == 7 *
sizeof(
void *),
"sizevft %d\n", pTA->cbSizeVft);
1892 ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE,
"typeflags %x\n", pTA->wTypeFlags);
1893 ok(pTA->cFuncs == 1,
"cfuncs %d\n", pTA->cFuncs);
1894 ok(pTA->cImplTypes == 1,
"cimpltypes %d\n", pTA->cImplTypes);
1895 ITypeInfo_ReleaseTypeAttr(pTI, pTA);
1897 hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
1899 hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
1901 hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
1904 ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
1905 ITypeInfo_Release(pTI_p);
1906 hr = ITypeInfo_GetFuncDesc(pTI, 1, &pFD);
1908 hr = ITypeInfo_GetFuncDesc(pTI, 0, &pFD);
1910 ok(pFD->memid == 0x1c,
"memid %08lx\n", pFD->memid);
1911 ITypeInfo_ReleaseFuncDesc(pTI, pFD);
1912 ITypeInfo_Release(pTI);
1916 hr = ITypeLib_GetTypeInfoOfGuid(pTL, &IID_ItestIF5, &pTI);
1919 hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
1922 ok(pTA->cbSizeVft == 7 *
sizeof(
void *),
"sizevft %d\n", pTA->cbSizeVft);
1923 ok(pTA->wTypeFlags == TYPEFLAG_FDUAL,
"typeflags %x\n", pTA->wTypeFlags);
1924 ok(pTA->cFuncs == 8,
"cfuncs %d\n", pTA->cFuncs);
1925 ok(pTA->cImplTypes == 1,
"cimpltypes %d\n", pTA->cImplTypes);
1926 ITypeInfo_ReleaseTypeAttr(pTI, pTA);
1928 hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
1930 hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
1932 hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
1935 ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
1936 ITypeInfo_Release(pTI_p);
1937 hr = ITypeInfo_GetFuncDesc(pTI, 6, &pFD);
1939 ok(pFD->memid == 0x1234,
"memid %08lx\n", pFD->memid);
1940 ITypeInfo_ReleaseFuncDesc(pTI, pFD);
1941 ITypeInfo_Release(pTI);
1944 hr = ITypeLib_GetTypeInfoOfGuid(pTL, &IID_ItestIF7, &pTI);
1947 hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
1950 ok(pTA->cbSizeVft == 7 *
sizeof(
void *),
"sizevft %d\n", pTA->cbSizeVft);
1951 ok(pTA->wTypeFlags == (TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL),
"typeflags %x\n", pTA->wTypeFlags);
1952 ok(pTA->cFuncs == 10,
"cfuncs %d\n", pTA->cFuncs);
1953 ok(pTA->cImplTypes == 1,
"cimpltypes %d\n", pTA->cImplTypes);
1954 ITypeInfo_ReleaseTypeAttr(pTI, pTA);
1956 hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
1958 hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
1960 hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
1963 ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
1964 ITypeInfo_Release(pTI_p);
1966 hr = ITypeInfo_GetFuncDesc(pTI, 9, &pFD);
1968 ok(pFD->memid == 0x1236,
"memid %08lx\n", pFD->memid);
1969 ITypeInfo_ReleaseFuncDesc(pTI, pFD);
1970 ITypeInfo_Release(pTI);
1973 hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF10, &pTI);
1976 hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
1979 ok(pTA->cbSizeVft ==
sizeof(IDispatchVtbl),
"sizevft %d\n", pTA->cbSizeVft);
1980 ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE,
"typeflags %x\n", pTA->wTypeFlags);
1981 ok(pTA->cFuncs == 3,
"cfuncs %d\n", pTA->cFuncs);
1982 ok(pTA->cImplTypes == 1,
"cimpltypes %d\n", pTA->cImplTypes);
1983 ITypeInfo_ReleaseTypeAttr(pTI, pTA);
1985 hr = ITypeInfo_GetRefTypeOfImplType(pTI, -1, &href);
1987 hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
1989 hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
1991 hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
1994 ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
1995 ITypeInfo_Release(pTI_p);
1998 hr = ITypeInfo_GetFuncDesc(pTI, 3, &pFD);
2000 hr = ITypeInfo_GetFuncDesc(pTI, 2, &pFD);
2002 ok(pFD->memid == 0x60010000,
"memid %08lx\n", pFD->memid);
2003 ok(pFD->oVft == 2 *
sizeof(
void *),
"oVft %d\n", pFD->oVft);
2004 ITypeInfo_ReleaseFuncDesc(pTI, pFD);
2005 ITypeInfo_Release(pTI);
2008 hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF11, &pTI);
2011 hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
2014 ok(pTA->cbSizeVft == 7 *
sizeof(
void *),
"sizevft %d\n", pTA->cbSizeVft);
2015 ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE,
"typeflags %x\n", pTA->wTypeFlags);
2016 ok(pTA->cFuncs == 10,
"cfuncs %d\n", pTA->cFuncs);
2017 ok(pTA->cImplTypes == 1,
"cimpltypes %d\n", pTA->cImplTypes);
2018 ITypeInfo_ReleaseTypeAttr(pTI, pTA);
2020 hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
2022 hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
2024 hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
2027 ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
2028 ITypeInfo_Release(pTI_p);
2031 hr = ITypeInfo_GetFuncDesc(pTI, 10, &pFD);
2033 hr = ITypeInfo_GetFuncDesc(pTI, 9, &pFD);
2035 ok(pFD->memid == 0x1236,
"memid %08lx\n", pFD->memid);
2036 ok(pFD->oVft == 9 *
sizeof(
void *),
"oVft %d\n", pFD->oVft);
2039 ok(pFD->cParams == 1,
"cParams %i\n", pFD->cParams);
2041 "vt 0x%x\n", pFD->lprgelemdescParam[0].tdesc.vt);
2042 href = pFD->lprgelemdescParam[0].tdesc.hreftype;
2043 ok((href & 0xff000000) == 0x04000000,
"href 0x%08lx\n", href);
2044 hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
2047 ITypeInfo_ReleaseFuncDesc(pTI, pFD);
2048 ITypeInfo_Release(pTI);
2052 hr = ITypeLib_GetTypeInfoOfGuid(pTL, &IID_ItestIF2, &pTI);
2055 hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
2058 ok(pTA->cbSizeVft == 6 *
sizeof(
void *),
"sizevft %d\n", pTA->cbSizeVft);
2059 ok(pTA->wTypeFlags == 0,
"typeflags %x\n", pTA->wTypeFlags);
2060 ok(pTA->cFuncs == 1,
"cfuncs %d\n", pTA->cFuncs);
2061 ok(pTA->cImplTypes == 1,
"cimpltypes %d\n", pTA->cImplTypes);
2062 ITypeInfo_ReleaseTypeAttr(pTI, pTA);
2065 hr = ITypeInfo_GetFuncDesc(pTI, 1, &pFD);
2067 hr = ITypeInfo_GetFuncDesc(pTI, 0, &pFD);
2069 ok(pFD->memid == 0x60020000,
"memid %08lx\n", pFD->memid);
2070 ok(pFD->oVft == 5 *
sizeof(
void *),
"oVft %d\n", pFD->oVft);
2071 ITypeInfo_ReleaseFuncDesc(pTI, pFD);
2072 ITypeInfo_Release(pTI);
2075 hr = ITypeLib_GetTypeInfoOfGuid(pTL, &IID_ItestIF13, &pTI);
2078 hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
2081 ok(pTA->cbSizeVft == 7 *
sizeof(
void *),
"sizevft %d\n", pTA->cbSizeVft);
2082 ok(pTA->wTypeFlags == (TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL),
"typeflags %x\n", pTA->wTypeFlags);
2083 ok(pTA->cFuncs == 10,
"cfuncs %d\n", pTA->cFuncs);
2084 ok(pTA->cImplTypes == 1,
"cimpltypes %d\n", pTA->cImplTypes);
2085 ITypeInfo_ReleaseTypeAttr(pTI, pTA);
2087 hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
2089 hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
2091 hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
2094 ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
2096 hr = ITypeInfo_GetFuncDesc(pTI, 9, &pFD);
2098 ok(pFD->memid == 0x1236,
"memid %08lx\n", pFD->memid);
2099 ITypeInfo_ReleaseFuncDesc(pTI, pFD);
2101 hr = ITypeInfo_GetRefTypeInfo(pTI, -2, &dual_ti);
2104 hr = ITypeInfo_GetTypeAttr(dual_ti, &pTA);
2107 ok(pTA->cbSizeVft ==
sizeof(ItestIF13Vtbl),
"sizevft %d\n", pTA->cbSizeVft);
2108 ok(pTA->wTypeFlags == (TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FOLEAUTOMATION|TYPEFLAG_FDUAL),
"typeflags %x\n", pTA->wTypeFlags);
2109 ok(pTA->cFuncs == 1,
"cfuncs %d\n", pTA->cFuncs);
2110 ok(pTA->cImplTypes == 1,
"cimpltypes %d\n", pTA->cImplTypes);
2111 ITypeInfo_ReleaseTypeAttr(dual_ti, pTA);
2113 hr = ITypeInfo_GetRefTypeOfImplType(dual_ti, 0, &href);
2115 hr = ITypeInfo_GetRefTypeInfo(dual_ti, href, &pTI_p);
2117 hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
2120 ok(pTA->cbSizeVft ==
sizeof(ItestIF12Vtbl),
"sizevft %d\n", pTA->cbSizeVft);
2122 ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
2123 ITypeInfo_Release(pTI_p);
2125 ITypeInfo_Release(dual_ti);
2126 ITypeInfo_Release(pTI);
2128 ITypeLib_Release(pTL);
2134 static OLECHAR typelibW[] = {
't',
'y',
'p',
'e',
'l',
'i',
'b',0};
2135 static OLECHAR helpfileW[] = {
'C',
':',
'\\',
'b',
'o',
'g',
'u',
's',
'.',
'h',
'l',
'p',0};
2136 static OLECHAR interface1W[] = {
'i',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',
'1',0};
2137 static OLECHAR interface2W[] = {
'i',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',
'2',0};
2138 static OLECHAR interface3W[] = {
'i',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',
'3',0};
2139 static OLECHAR dualW[] = {
'd',
'u',
'a',
'l',0};
2140 static OLECHAR coclassW[] = {
'c',
'o',
'c',
'l',
'a',
's',
's',0};
2141 static const WCHAR defaultW[] = {
'd',
'e',
'f',
'a',
'u',
'l',
't',0x3213,0};
2142 static OLECHAR func1W[] = {
'f',
'u',
'n',
'c',
'1',0};
2143 static OLECHAR func2W[] = {
'f',
'u',
'n',
'c',
'2',0};
2144 static OLECHAR prop1W[] = {
'P',
'r',
'o',
'p',
'1',0};
2145 static OLECHAR param1W[] = {
'p',
'a',
'r',
'a',
'm',
'1',0};
2146 static OLECHAR param2W[] = {
'p',
'a',
'r',
'a',
'm',
'2',0};
2147 static OLECHAR asdfW[] = {
'A',
's',
'd',
'f',0};
2148 static OLECHAR aliasW[] = {
'a',
'l',
'i',
'a',
's',0};
2149 static OLECHAR invokeW[] = {
'I',
'n',
'v',
'o',
'k',
'e',0};
2150 static OLECHAR *names1[] = {func1W, param1W, param2W};
2151 static OLECHAR *names2[] = {func2W, param1W, param2W};
2152 static OLECHAR *propname[] = {prop1W, param1W};
2153 static const GUID tlcustguid = {0xbf611abe,0x5b38,0x11df,{0x91,0x5c,0x08,0x02,0x79,0x79,0x94,0x69}};
2154 static const GUID custguid = {0xbf611abe,0x5b38,0x11df,{0x91,0x5c,0x08,0x02,0x79,0x79,0x94,0x70}};
2155 static const GUID bogusguid = {0xbf611abe,0x5b38,0x11df,{0x91,0x5c,0x08,0x02,0x79,0x79,0x94,0x71}};
2156 static const GUID interfaceguid = {0x3b9ff02f,0x9675,0x4861,{0xb7,0x81,0xce,0xae,0xa4,0x78,0x2a,0xcc}};
2157 static const GUID interface2guid = {0x3b9ff02f,0x9675,0x4861,{0xb7,0x81,0xce,0xae,0xa4,0x78,0x2a,0xcd}};
2171 FUNCDESC funcdesc, *pfuncdesc;
2172 ELEMDESC elemdesc[5], *edesc;
2173 PARAMDESCEX paramdescex;
2174 TYPEDESC typedesc1, typedesc2;
2181 unsigned int cnames;
2213 ok(typeattr->cbSizeVft == 3 *
sizeof(
void*),
"Got wrong cbSizeVft: %u\n", typeattr->cbSizeVft);
2214 ITypeInfo_ReleaseTypeAttr(
unknown, typeattr);
2225 hres = ICreateTypeLib2_QueryInterface(createtl, &IID_ITypeLib, (
void**)&tl);
2228 hres = ITypeLib_GetTypeInfo(tl, 0,
NULL);
2231 hres = ITypeLib_GetTypeInfoType(tl, 0, &kind);
2234 hres = ITypeLib_GetTypeInfoType(tl, 0,
NULL);
2237 hres = ITypeLib_GetTypeInfoType(tl, 0,
NULL);
2240 hres = ITypeLib_GetLibAttr(tl,
NULL);
2243 hres = ITypeLib_GetLibAttr(tl, &libattr);
2246 ok(libattr->syskind == sys,
"syskind = %d\n", libattr->syskind);
2247 ok(libattr->wMajorVerNum == 0,
"wMajorVer = %d\n", libattr->wMajorVerNum);
2248 ok(libattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", libattr->wMinorVerNum);
2249 ok(libattr->wLibFlags == 0,
"wLibFlags = %d\n", libattr->wLibFlags);
2251 ITypeLib_ReleaseTLibAttr(tl, libattr);
2254 hres = ITypeLib_GetDocumentation(tl, -1, &
name, &docstring, &helpcontext, &
helpfile);
2257 ok(docstring ==
NULL,
"docstring != NULL\n");
2258 ok(helpcontext == 0,
"helpcontext != 0\n");
2264 hres = ICreateTypeLib2_SetName(createtl, typelibW);
2267 hres = ICreateTypeLib2_SetHelpFileName(createtl, helpfileW);
2282 V_I4(&cust_data) = 1;
2283 hres = ICreateTypeLib2_SetCustData(createtl, &tlcustguid, &cust_data);
2286 hres = ITypeLib_QueryInterface(tl, &IID_ITypeLib2, (
void**)&tl2);
2290 V_I4(&cust_data) = 0;
2291 hres = ITypeLib2_GetCustData(tl2, &tlcustguid, &cust_data);
2293 ok(
V_VT(&cust_data) ==
VT_I4,
"V_VT(&cust_data) = %d\n",
V_VT(&cust_data));
2294 ok(
V_I4(&cust_data) == 1,
"V_I4(&cust_data) = %ld\n",
V_I4(&cust_data));
2296 ITypeLib2_Release(tl2);
2311 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&interface1);
2320 ITypeLib_Release(tl);
2324 hres = ITypeInfo_GetDocumentation(interface1, -1, &
name, &docstring, &helpcontext, &
helpfile);
2327 ok(docstring ==
NULL,
"docstring != NULL\n");
2328 ok(helpcontext == 0,
"helpcontext != 0\n");
2337 hres = ITypeInfo_GetRefTypeInfo(interface1, 0,
NULL);
2341 hres = ICreateTypeInfo_LayOut(createti);
2344 hres = ICreateTypeInfo_SetGuid(createti, &interfaceguid);
2347 hres = ICreateTypeInfo_AddRefTypeInfo(createti,
NULL, &hreftype);
2353 hres = ICreateTypeInfo_AddRefTypeInfo(createti,
unknown, &hreftype);
2356 hres = ICreateTypeInfo_AddImplType(createti, 1, hreftype);
2359 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
2362 hres = ITypeInfo_GetRefTypeOfImplType(interface1, 0, &hreftype);
2364 ok(hreftype == 3,
"hreftype = %ld\n", hreftype);
2366 hres = ITypeInfo_GetRefTypeInfo(interface1, hreftype, &ti);
2369 hres = ITypeInfo_GetTypeAttr(ti, &typeattr);
2372 ok(typeattr->cbSizeInstance ==
ptr_size,
"retrieved IUnknown gave wrong cbSizeInstance: %lu\n", typeattr->cbSizeInstance);
2374 ok(typeattr->cbSizeVft == 3 *
ptr_size,
"retrieved IUnknown gave wrong cbSizeVft: %u\n", typeattr->cbSizeVft);
2375 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
2377 ITypeInfo_Release(ti);
2379 hres = ITypeInfo_GetRefTypeOfImplType(interface1, -1, &hreftype);
2382 ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo2, (
void**)&ti2);
2384 memset(&funcdesc, 0,
sizeof(FUNCDESC));
2385 funcdesc.funckind = FUNC_PUREVIRTUAL;
2386 funcdesc.invkind = INVOKE_PROPERTYGET;
2388 funcdesc.elemdescFunc.tdesc.vt =
VT_BSTR;
2389 funcdesc.elemdescFunc.idldesc.wIDLFlags = IDLFLAG_NONE;
2391 hres = ICreateTypeInfo_AddFuncDesc(createti, 0,
NULL);
2394 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2397 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
2400 hres = ITypeInfo2_GetFuncDesc(ti2, 0,
NULL);
2403 hres = ITypeInfo2_GetFuncDesc(ti2, 1, &pfuncdesc);
2406 hres = ITypeInfo2_GetFuncDesc(ti2, 0, &pfuncdesc);
2409 ok(pfuncdesc->memid == 0,
"got %lx\n", pfuncdesc->memid);
2410 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2411 ok(pfuncdesc->lprgelemdescParam ==
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2412 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2413 ok(pfuncdesc->invkind == INVOKE_PROPERTYGET,
"got 0x%x\n", pfuncdesc->invkind);
2414 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2415 ok(pfuncdesc->cParams == 0,
"got %d\n", pfuncdesc->cParams);
2416 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2418 ok(pfuncdesc->oVft == 3 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2419 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2420 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_BSTR,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2421 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2423 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2425 hres = ICreateTypeInfo_SetFuncHelpContext(createti, 0, 0xabcdefab);
2428 funcdesc.invkind = INVOKE_PROPERTYPUT;
2429 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2432 funcdesc.invkind = INVOKE_PROPERTYPUTREF;
2433 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2436 elemdesc[0].tdesc.vt =
VT_BSTR;
2437 elemdesc[0].idldesc.dwReserved = 0;
2438 elemdesc[0].idldesc.wIDLFlags = IDLFLAG_FIN;
2440 funcdesc.lprgelemdescParam = elemdesc;
2441 funcdesc.invkind = INVOKE_PROPERTYPUT;
2442 funcdesc.cParams = 1;
2443 funcdesc.elemdescFunc.tdesc.vt =
VT_VOID;
2445 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2448 hres = ICreateTypeInfo_SetFuncHelpContext(createti, 1, 0xabcdefab);
2451 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, propname, 0);
2454 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0,
NULL, 1);
2457 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, propname, 1);
2460 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 1, propname, 1);
2463 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 1, propname, 2);
2466 hres = ITypeInfo2_GetFuncDesc(ti2, 1, &pfuncdesc);
2469 ok(pfuncdesc->memid == 0,
"got %lx\n", pfuncdesc->memid);
2470 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2471 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2472 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2473 ok(pfuncdesc->invkind == INVOKE_PROPERTYPUT,
"got 0x%x\n", pfuncdesc->invkind);
2474 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2475 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
2476 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2478 ok(pfuncdesc->oVft == 4 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2479 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2480 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2481 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2483 edesc = pfuncdesc->lprgelemdescParam;
2484 ok(edesc->tdesc.vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.vt);
2485 ok(edesc->idldesc.wIDLFlags == IDLFLAG_FIN,
"got: %x\n", edesc->idldesc.wIDLFlags);
2487 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2490 funcdesc.invkind = INVOKE_PROPERTYPUTREF;
2491 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
2494 hres = ICreateTypeInfo_SetFuncHelpContext(createti, 0, 0xabcdefab);
2497 hres = ICreateTypeInfo_SetFuncHelpContext(createti, 0, 0x201);
2501 funcdesc.lprgelemdescParam =
NULL;
2502 funcdesc.invkind = INVOKE_FUNC;
2503 funcdesc.cParams = 0;
2504 funcdesc.cScodes = 1;
2505 funcdesc.lprgscode =
NULL;
2506 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2509 hres = ITypeInfo2_GetFuncDesc(ti2, 1, &pfuncdesc);
2512 ok(pfuncdesc->memid == 1,
"got %ld\n", pfuncdesc->memid);
2513 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2514 ok(pfuncdesc->lprgelemdescParam ==
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2515 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2516 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
2517 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2518 ok(pfuncdesc->cParams == 0,
"got %d\n", pfuncdesc->cParams);
2519 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2521 ok(pfuncdesc->oVft == 4 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2522 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2523 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2524 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2526 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2529 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2532 elemdesc[0].tdesc.vt =
VT_PTR;
2533 elemdesc[0].tdesc.lptdesc = &typedesc1;
2535 funcdesc.cParams = 1;
2536 funcdesc.lprgelemdescParam = elemdesc;
2537 hres = ICreateTypeInfo_AddFuncDesc(createti, 4, &funcdesc);
2540 hres = ITypeInfo2_GetFuncDesc(ti2, 4, &pfuncdesc);
2543 ok(pfuncdesc->memid == 0x60010004,
"got %lx\n", pfuncdesc->memid);
2544 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2545 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2546 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2547 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
2548 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2549 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
2550 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2552 ok(pfuncdesc->oVft == 7 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2553 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2554 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2555 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2557 edesc = pfuncdesc->lprgelemdescParam;
2558 ok(edesc->tdesc.vt ==
VT_PTR,
"got: %d\n", edesc->tdesc.vt);
2559 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FIN,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
2560 ok(edesc->paramdesc.pparamdescex ==
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
2561 ok(edesc->tdesc.lptdesc !=
NULL,
"got: %p\n", edesc->tdesc.lptdesc);
2562 ok(edesc->tdesc.lptdesc->vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.lptdesc->vt);
2564 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2566 elemdesc[0].tdesc.lptdesc = &typedesc2;
2568 typedesc2.lptdesc = &typedesc1;
2569 hres = ICreateTypeInfo_AddFuncDesc(createti, 4, &funcdesc);
2572 hres = ITypeInfo2_GetFuncDesc(ti2, 4, &pfuncdesc);
2575 ok(pfuncdesc->memid == 0x60010007,
"got %lx\n", pfuncdesc->memid);
2576 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2577 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2578 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2579 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
2580 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2581 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
2582 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2584 ok(pfuncdesc->oVft == 7 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2585 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2586 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2587 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2589 edesc = pfuncdesc->lprgelemdescParam;
2590 ok(edesc->tdesc.vt ==
VT_PTR,
"got: %d\n", edesc->tdesc.vt);
2591 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FIN,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
2592 ok(edesc->paramdesc.pparamdescex ==
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
2593 ok(edesc->tdesc.lptdesc !=
NULL,
"got: %p\n", edesc->tdesc.lptdesc);
2594 ok(edesc->tdesc.lptdesc->vt ==
VT_PTR,
"got: %d\n", edesc->tdesc.lptdesc->vt);
2595 ok(edesc->tdesc.lptdesc->lptdesc !=
NULL,
"got: %p\n", edesc->tdesc.lptdesc->lptdesc);
2596 ok(edesc->tdesc.lptdesc->lptdesc->vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.lptdesc->lptdesc->vt);
2598 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2600 elemdesc[0].tdesc.vt =
VT_INT;
2601 elemdesc[0].paramdesc.wParamFlags = PARAMFLAG_FHASDEFAULT;
2602 elemdesc[0].paramdesc.pparamdescex = ¶mdescex;
2604 V_INT(¶mdescex.varDefaultValue) = 0x123;
2605 hres = ICreateTypeInfo_AddFuncDesc(createti, 3, &funcdesc);
2608 hres = ITypeInfo2_GetFuncDesc(ti2, 3, &pfuncdesc);
2611 ok(pfuncdesc->memid == 0x60010003,
"got %lx\n", pfuncdesc->memid);
2612 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2613 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2614 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2615 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
2616 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2617 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
2618 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2620 ok(pfuncdesc->oVft == 6 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2621 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2622 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2623 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2625 edesc = pfuncdesc->lprgelemdescParam;
2626 ok(edesc->tdesc.vt ==
VT_INT,
"got: %d\n", edesc->tdesc.vt);
2627 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
2628 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
2629 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
2630 edesc->paramdesc.pparamdescex->cBytes);
2631 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_I4,
"got: %d\n",
2632 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
2633 ok(
V_I4(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0x123,
"got: 0x%lx\n",
2634 V_I4(&edesc->paramdesc.pparamdescex->varDefaultValue));
2636 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2638 elemdesc[0].idldesc.dwReserved = 0;
2639 elemdesc[0].idldesc.wIDLFlags = IDLFLAG_FIN;
2640 elemdesc[1].tdesc.vt =
VT_UI2;
2641 elemdesc[1].paramdesc.wParamFlags = PARAMFLAG_FHASDEFAULT;
2642 elemdesc[1].paramdesc.pparamdescex = ¶mdescex;
2644 V_UI2(¶mdescex.varDefaultValue) = 0xffff;
2645 funcdesc.cParams = 2;
2646 hres = ICreateTypeInfo_AddFuncDesc(createti, 3, &funcdesc);
2649 hres = ITypeInfo2_GetFuncDesc(ti2, 3, &pfuncdesc);
2652 ok(pfuncdesc->memid == 0x60010009,
"got %lx\n", pfuncdesc->memid);
2653 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2654 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2655 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2656 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
2657 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2658 ok(pfuncdesc->cParams == 2,
"got %d\n", pfuncdesc->cParams);
2659 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2661 ok(pfuncdesc->oVft == 6 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2662 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2663 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2664 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2666 edesc = pfuncdesc->lprgelemdescParam;
2667 ok(edesc->tdesc.vt ==
VT_INT,
"got: %d\n", edesc->tdesc.vt);
2668 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FIN,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
2669 ok(edesc->paramdesc.pparamdescex ==
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
2671 edesc = pfuncdesc->lprgelemdescParam + 1;
2672 ok(edesc->tdesc.vt ==
VT_UI2,
"got: %d\n", edesc->tdesc.vt);
2673 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
2674 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
2675 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
2676 edesc->paramdesc.pparamdescex->cBytes);
2677 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_UI2,
"got: %d\n",
2678 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
2679 ok(
V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0xFFFF,
"got: 0x%x\n",
2680 V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue));
2682 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2684 elemdesc[0].paramdesc.wParamFlags = PARAMFLAG_FHASDEFAULT;
2685 elemdesc[0].paramdesc.pparamdescex = ¶mdescex;
2686 elemdesc[1].tdesc.vt =
VT_INT;
2688 V_INT(¶mdescex.varDefaultValue) = 0xffffffff;
2689 hres = ICreateTypeInfo_AddFuncDesc(createti, 3, &funcdesc);
2692 elemdesc[0].tdesc.vt =
VT_BSTR;
2693 elemdesc[1].tdesc.vt =
VT_BSTR;
2696 hres = ICreateTypeInfo_AddFuncDesc(createti, 3, &funcdesc);
2700 hres = ITypeInfo2_GetFuncDesc(ti2, 3, &pfuncdesc);
2703 ok(pfuncdesc->memid == 0x6001000b,
"got %lx\n", pfuncdesc->memid);
2704 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2705 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2706 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2707 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
2708 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2709 ok(pfuncdesc->cParams == 2,
"got %d\n", pfuncdesc->cParams);
2710 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2712 ok(pfuncdesc->oVft == 6 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2713 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2714 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2715 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2717 edesc = pfuncdesc->lprgelemdescParam;
2718 ok(edesc->tdesc.vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.vt);
2719 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
2720 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
2721 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
2722 edesc->paramdesc.pparamdescex->cBytes);
2723 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_BSTR,
"got: %d\n",
2724 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
2729 edesc = pfuncdesc->lprgelemdescParam + 1;
2730 ok(edesc->tdesc.vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.vt);
2731 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
2732 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
2733 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
2734 edesc->paramdesc.pparamdescex->cBytes);
2735 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_BSTR,
"got: %d\n",
2736 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
2741 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2744 elemdesc[0].tdesc.hreftype = hreftype;
2745 elemdesc[0].paramdesc.pparamdescex = ¶mdescex;
2746 elemdesc[0].paramdesc.wParamFlags = PARAMFLAG_FHASDEFAULT;
2748 V_INT(¶mdescex.varDefaultValue) = 0x789;
2750 funcdesc.lprgelemdescParam = elemdesc;
2751 funcdesc.invkind = INVOKE_FUNC;
2752 funcdesc.cParams = 1;
2753 funcdesc.elemdescFunc.tdesc.vt =
VT_VOID;
2755 hres = ICreateTypeInfo_AddFuncDesc(createti, 5, &funcdesc);
2758 hres = ITypeInfo2_GetFuncDesc(ti2, 5, &pfuncdesc);
2761 ok(pfuncdesc->memid == 0x60010005,
"got %lx\n", pfuncdesc->memid);
2762 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2763 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2764 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2765 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
2766 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2767 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
2768 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2770 ok(pfuncdesc->oVft == 8 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2771 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2772 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2773 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2775 edesc = pfuncdesc->lprgelemdescParam;
2776 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
2777 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
2778 "got: 0x%x\n", edesc->paramdesc.wParamFlags);
2780 ok(edesc->tdesc.hreftype == hreftype,
"got: 0x%lx\n", edesc->tdesc.hreftype);
2781 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_INT,
"got: %d\n",
2782 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
2783 ok(
V_INT(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0x789,
"got: %d\n",
2784 V_INT(&edesc->paramdesc.pparamdescex->varDefaultValue));
2786 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2789 elemdesc[0].paramdesc.pparamdescex = ¶mdescex;
2790 elemdesc[0].paramdesc.wParamFlags = PARAMFLAG_FHASDEFAULT;
2792 V_INT(¶mdescex.varDefaultValue) = 3;
2794 funcdesc.lprgelemdescParam = elemdesc;
2795 funcdesc.invkind = INVOKE_FUNC;
2796 funcdesc.cParams = 1;
2799 hres = ICreateTypeInfo_AddFuncDesc(createti, 6, &funcdesc);
2802 hres = ITypeInfo2_GetFuncDesc(ti2, 6, &pfuncdesc);
2805 ok(pfuncdesc->memid == 0x60010006,
"got %lx\n", pfuncdesc->memid);
2806 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2807 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2808 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2809 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
2810 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2811 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
2812 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2814 ok(pfuncdesc->oVft == 9 *
ptr_size,
"got %d\n", pfuncdesc->oVft);
2815 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2816 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VARIANT,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2817 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2819 edesc = pfuncdesc->lprgelemdescParam;
2820 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
2821 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
2822 "got: 0x%x\n", edesc->paramdesc.wParamFlags);
2823 ok(edesc->tdesc.vt ==
VT_VARIANT,
"got: %d\n", edesc->tdesc.vt);
2824 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_INT,
"got: %d\n",
2825 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
2826 ok(
V_INT(&edesc->paramdesc.pparamdescex->varDefaultValue) == 3,
"got: %d\n",
2827 V_INT(&edesc->paramdesc.pparamdescex->varDefaultValue));
2829 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2831 hres = ITypeInfo_GetDocumentation(interface1, 0, &
name, &docstring, &helpcontext, &
helpfile);
2834 ok(docstring ==
NULL,
"docstring != NULL\n");
2835 ok(helpcontext == 0x201,
"helpcontext != 0x201\n");
2840 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 1000,
NULL, 1);
2843 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 1000, names1, 1);
2846 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, names1, 2);
2849 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, names2, 1);
2852 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, names1, 1);
2861 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 3, names2, 3);
2864 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 3, names1, 3);
2867 ITypeInfo2_Release(ti2);
2868 ICreateTypeInfo_Release(createti);
2876 hres = ICreateTypeInfo_SetGuid(createti, &interface2guid);
2879 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&interface2);
2882 hres = ITypeInfo_GetRefTypeOfImplType(interface2, 0, &hreftype);
2885 hres = ICreateTypeInfo_AddRefTypeInfo(createti, interface1, &hreftype);
2888 hres = ITypeInfo_GetRefTypeInfo(interface2, 0, &ti);
2890 ok(ti == interface1,
"Received and added interfaces are different\n");
2892 ITypeInfo_Release(ti);
2894 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
2897 hres = ITypeInfo_GetRefTypeOfImplType(interface2, 0, &hreftype);
2899 ok(hreftype == 2,
"hreftype = %ld\n", hreftype);
2901 hres = ITypeInfo_GetRefTypeOfImplType(interface2, -1, &hreftype);
2904 hres = ICreateTypeInfo_SetImplTypeFlags(createti, 0, IMPLTYPEFLAG_FDEFAULT);
2907 hres = ITypeInfo_GetImplTypeFlags(interface2, 0, &impltypeflags);
2909 ok(impltypeflags == 0,
"impltypeflags = %x\n", impltypeflags);
2911 hres = ITypeInfo_GetImplTypeFlags(interface2, 1, &impltypeflags);
2914 funcdesc.elemdescFunc.tdesc.vt =
VT_VOID;
2915 funcdesc.oVft = 0xaaac;
2916 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
2919 funcdesc.oVft = 0xaab0;
2920 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
2923 funcdesc.oVft = 0xaaa8;
2924 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
2927 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&ti2);
2930 hres = ITypeInfo2_GetFuncDesc(ti2, 0, &pfuncdesc);
2933 ok(pfuncdesc->memid == 0x60020000,
"got %lx\n", pfuncdesc->memid);
2934 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
2935 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
2936 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
2937 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
2938 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
2939 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
2940 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
2941 ok(pfuncdesc->oVft == (
short)0xaaa8,
"got %d\n", pfuncdesc->oVft);
2942 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
2943 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
2944 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
2946 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2947 ITypeInfo2_Release(ti2);
2951 ICreateTypeInfo_Release(createti);
2958 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ICreateTypeInfo2, (
void**)&createti2);
2961 hres = ICreateTypeInfo2_QueryInterface(createti2, &IID_ITypeInfo2, (
void**)&ti2);
2967 hres = ITypeInfo2_GetCustData(ti2, &custguid,
NULL);
2970 hres = ITypeInfo2_GetCustData(ti2, &custguid, &cust_data);
2973 hres = ICreateTypeInfo2_SetCustData(createti2,
NULL,
NULL);
2976 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid,
NULL);
2979 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid, &cust_data);
2983 V_I4(&cust_data) = 0xdeadbeef;
2985 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid, &cust_data);
2988 V_I4(&cust_data) = 0;
2991 hres = ITypeInfo2_GetCustData(ti2, &custguid, &cust_data);
2995 ok(
V_I4(&cust_data) == 0xdeadbeef,
"got 0x%08lx\n",
V_I4(&cust_data));
2998 V_I4(&cust_data) = 12345678;
3000 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid, &cust_data);
3003 V_I4(&cust_data) = 0;
3006 hres = ITypeInfo2_GetCustData(ti2, &custguid, &cust_data);
3010 ok(
V_I4(&cust_data) == 12345678,
"got 0x%08lx\n",
V_I4(&cust_data));
3015 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid, &cust_data);
3019 V_I4(&cust_data) = 0;
3022 hres = ITypeInfo2_GetCustData(ti2, &custguid, &cust_data);
3030 V_UI4(&cust_data) = 17;
3032 hres = ITypeInfo2_GetCustData(ti2, &bogusguid, &cust_data);
3037 ITypeInfo2_Release(ti2);
3038 ICreateTypeInfo2_Release(createti2);
3039 ICreateTypeInfo_Release(createti);
3041 hres = ICreateTypeLib2_CreateTypeInfo(createtl, coclassW,
TKIND_COCLASS, &createti);
3044 hres = ICreateTypeInfo_AddRefTypeInfo(createti, interface1, &hreftype);
3047 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
3050 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
3053 hres = ICreateTypeInfo_AddRefTypeInfo(createti,
unknown, &hreftype);
3056 hres = ICreateTypeInfo_AddImplType(createti, 1, hreftype);
3059 hres = ICreateTypeInfo_AddImplType(createti, 1, hreftype);
3062 hres = ICreateTypeInfo_AddImplType(createti, 2, hreftype);
3065 hres = ICreateTypeInfo_SetImplTypeFlags(createti, 0, IMPLTYPEFLAG_FDEFAULT);
3068 hres = ICreateTypeInfo_SetImplTypeFlags(createti, 1, IMPLTYPEFLAG_FRESTRICTED);
3071 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&ti);
3074 hres = ITypeInfo_GetImplTypeFlags(ti, 0,
NULL);
3077 hres = ITypeInfo_GetImplTypeFlags(ti, 0, &impltypeflags);
3079 ok(impltypeflags == IMPLTYPEFLAG_FDEFAULT,
"impltypeflags = %x\n", impltypeflags);
3081 hres = ITypeInfo_GetImplTypeFlags(ti, 1, &impltypeflags);
3083 ok(impltypeflags == IMPLTYPEFLAG_FRESTRICTED,
"impltypeflags = %x\n", impltypeflags);
3085 hres = ITypeInfo_GetImplTypeFlags(ti, 2, &impltypeflags);
3087 ok(impltypeflags == 0,
"impltypeflags = %x\n", impltypeflags);
3089 hres = ITypeInfo_GetRefTypeOfImplType(ti, 0, &hreftype);
3091 ok(hreftype == 0,
"hreftype = %ld\n", hreftype);
3093 hres = ITypeInfo_GetRefTypeOfImplType(ti, 1, &hreftype);
3095 ok(hreftype == 1,
"hreftype = %ld\n", hreftype);
3097 hres = ITypeInfo_GetRefTypeOfImplType(ti, 2, &hreftype);
3099 ok(hreftype == 1,
"hreftype = %ld\n", hreftype);
3101 hres = ITypeInfo_GetRefTypeOfImplType(ti, -1, &hreftype);
3104 ITypeInfo_Release(ti);
3106 ICreateTypeInfo_Release(createti);
3111 hres = ICreateTypeInfo_SetTypeFlags(createti, TYPEFLAG_FDUAL);
3114 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
3117 hres = ICreateTypeInfo_AddRefTypeInfo(createti,
dispatch, &hreftype);
3120 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
3123 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&dual);
3126 hres = ITypeInfo_GetTypeAttr(dual, &typeattr);
3128 ok(typeattr->cbSizeInstance ==
ptr_size,
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
3129 ok(typeattr->typekind ==
TKIND_INTERFACE,
"typekind = %d\n", typeattr->typekind);
3130 ok(typeattr->cFuncs == 1,
"cFuncs = %d\n", typeattr->cFuncs);
3131 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
3132 ok(typeattr->cImplTypes == 1,
"cImplTypes = %d\n", typeattr->cImplTypes);
3134 ok(typeattr->cbSizeVft == 8 *
ptr_size,
"cbSizeVft = %d\n", typeattr->cbSizeVft);
3135 ok(typeattr->cbAlignment == 4,
"cbAlignment = %d\n", typeattr->cbAlignment);
3136 ok(typeattr->wTypeFlags == (TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL),
"wTypeFlags = %d\n", typeattr->wTypeFlags);
3137 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
3138 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
3140 ITypeInfo_ReleaseTypeAttr(dual, typeattr);
3142 hres = ITypeInfo_GetRefTypeOfImplType(dual, -1, &hreftype);
3144 ok(hreftype == -2,
"got %08lx\n", hreftype);
3147 hres = ITypeInfo_GetRefTypeInfo(dual, -2, &ti);
3152 hres = ITypeInfo_GetTypeAttr(ti, &typeattr);
3154 ok(typeattr->cbSizeInstance ==
ptr_size,
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
3155 ok(typeattr->typekind ==
TKIND_DISPATCH,
"typekind = %d\n", typeattr->typekind);
3157 ok(typeattr->cFuncs == 8,
"cFuncs = %d\n", typeattr->cFuncs);
3158 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
3159 ok(typeattr->cImplTypes == 1,
"cImplTypes = %d\n", typeattr->cImplTypes);
3160 ok(typeattr->cbSizeVft == 7 *
sizeof(
void *),
"cbSizeVft = %d\n", typeattr->cbSizeVft);
3161 ok(typeattr->cbAlignment == 4,
"cbAlignment = %d\n", typeattr->cbAlignment);
3162 ok(typeattr->wTypeFlags == (TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL),
"wTypeFlags = %d\n", typeattr->wTypeFlags);
3163 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
3164 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
3166 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
3168 hres = ITypeInfo_GetRefTypeInfo(dual, -2, &ti_2);
3169 ok(
hres ==
S_OK,
"Failed to get reference typeinfo, hr %#lx.\n",
hres);
3171 ok(ti == ti_2,
"Unexpected typeinfo instance.\n");
3174 ITypeInfo_AddRef(ti_2);
3177 ITypeInfo_Release(ti_2);
3179 ITypeInfo_Release(ti_2);
3180 ITypeInfo_Release(ti);
3182 hres = ICreateTypeInfo_SetTypeDescAlias(createti, &typedesc1);
3185 ICreateTypeInfo_Release(createti);
3187 hres = ITypeInfo_GetTypeAttr(interface1, &typeattr);
3189 ok(typeattr->cbSizeInstance ==
ptr_size,
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
3190 ok(typeattr->typekind ==
TKIND_INTERFACE,
"typekind = %d\n", typeattr->typekind);
3191 ok(typeattr->cFuncs == 13,
"cFuncs = %d\n", typeattr->cFuncs);
3192 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
3193 ok(typeattr->cImplTypes == 1,
"cImplTypes = %d\n", typeattr->cImplTypes);
3195 ok(typeattr->cbSizeVft == 16 *
ptr_size,
"cbSizeVft = %d\n", typeattr->cbSizeVft);
3196 ok(typeattr->cbAlignment == 4,
"cbAlignment = %d\n", typeattr->cbAlignment);
3197 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = %d\n", typeattr->wTypeFlags);
3198 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
3199 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
3201 ITypeInfo_ReleaseTypeAttr(interface1, typeattr);
3203 hres = ITypeInfo_GetTypeAttr(interface2, &typeattr);
3205 ok(typeattr->cbSizeInstance ==
ptr_size,
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
3206 ok(typeattr->typekind ==
TKIND_INTERFACE,
"typekind = %d\n", typeattr->typekind);
3207 ok(typeattr->cFuncs == 2,
"cFuncs = %d\n", typeattr->cFuncs);
3208 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
3209 ok(typeattr->cImplTypes == 1,
"cImplTypes = %d\n", typeattr->cImplTypes);
3210 ok((sys ==
SYS_WIN32 && typeattr->cbSizeVft == 0xaab0) ||
3211 (sys ==
SYS_WIN64 && typeattr->cbSizeVft == 0xaab8),
3212 "cbSizeVft = 0x%x\n", typeattr->cbSizeVft);
3213 ok(typeattr->cbAlignment == 4,
"cbAlignment = %d\n", typeattr->cbAlignment);
3214 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = %d\n", typeattr->wTypeFlags);
3215 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
3216 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
3218 ITypeInfo_ReleaseTypeAttr(interface2, typeattr);
3220 ok(ITypeInfo_Release(interface2)==0,
"Object should be freed\n");
3221 ok(ITypeInfo_Release(interface1)==0,
"Object should be freed\n");
3222 ok(ITypeInfo_Release(dual)==0,
"Object should be freed\n");
3224 hres = ICreateTypeLib2_CreateTypeInfo(createtl, aliasW,
TKIND_ALIAS, &createti);
3227 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&interface1);
3233 hres = ITypeInfo_GetTypeAttr(interface1, &typeattr);
3235 ok(typeattr->cbSizeInstance == 0xffffffb4,
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
3236 ok(typeattr->typekind ==
TKIND_ALIAS,
"typekind = %d\n", typeattr->typekind);
3237 ok(typeattr->cFuncs == 0,
"cFuncs = %d\n", typeattr->cFuncs);
3238 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
3239 ok(typeattr->cImplTypes == 0,
"cImplTypes = %d\n", typeattr->cImplTypes);
3240 ok(typeattr->cbSizeVft == 0,
"cbSizeVft = %d\n", typeattr->cbSizeVft);
3241 ok(typeattr->cbAlignment == 0,
"cbAlignment = %d\n", typeattr->cbAlignment);
3242 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = %d\n", typeattr->wTypeFlags);
3243 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
3244 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
3245 ok(typeattr->tdescAlias.vt ==
VT_EMPTY,
"Got wrong tdescAlias.vt: %u\n", typeattr->tdescAlias.vt);
3246 ITypeInfo_ReleaseTypeAttr(interface1, typeattr);
3249 hres = ICreateTypeInfo_SetTypeDescAlias(createti,
NULL);
3252 typedesc1.vt =
VT_I1;
3253 hres = ICreateTypeInfo_SetTypeDescAlias(createti, &typedesc1);
3256 hres = ITypeInfo_GetTypeAttr(interface1, &typeattr);
3258 ok(typeattr->cbSizeInstance == 1,
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
3259 ok(typeattr->typekind ==
TKIND_ALIAS,
"typekind = %d\n", typeattr->typekind);
3260 ok(typeattr->cFuncs == 0,
"cFuncs = %d\n", typeattr->cFuncs);
3261 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
3262 ok(typeattr->cImplTypes == 0,
"cImplTypes = %d\n", typeattr->cImplTypes);
3263 ok(typeattr->cbSizeVft == 0,
"cbSizeVft = %d\n", typeattr->cbSizeVft);
3264 ok(typeattr->cbAlignment == 1,
"cbAlignment = %d\n", typeattr->cbAlignment);
3265 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = %d\n", typeattr->wTypeFlags);
3266 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
3267 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
3268 ok(typeattr->tdescAlias.vt ==
VT_I1,
"Got wrong tdescAlias.vt: %u\n", typeattr->tdescAlias.vt);
3269 ITypeInfo_ReleaseTypeAttr(interface1, typeattr);
3271 typedesc1.vt =
VT_R8;
3272 hres = ICreateTypeInfo_SetTypeDescAlias(createti, &typedesc1);
3275 hres = ITypeInfo_GetTypeAttr(interface1, &typeattr);
3277 ok(typeattr->cbSizeInstance == 8,
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
3278 ok(typeattr->typekind ==
TKIND_ALIAS,
"typekind = %d\n", typeattr->typekind);
3279 ok(typeattr->cFuncs == 0,
"cFuncs = %d\n", typeattr->cFuncs);
3280 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
3281 ok(typeattr->cImplTypes == 0,
"cImplTypes = %d\n", typeattr->cImplTypes);
3282 ok(typeattr->cbSizeVft == 0,
"cbSizeVft = %d\n", typeattr->cbSizeVft);
3283 ok(typeattr->cbAlignment == 4,
"cbAlignment = %d\n", typeattr->cbAlignment);
3284 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = %d\n", typeattr->wTypeFlags);
3285 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
3286 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
3287 ok(typeattr->tdescAlias.vt ==
VT_R8,
"Got wrong tdescAlias.vt: %u\n", typeattr->tdescAlias.vt);
3288 ITypeInfo_ReleaseTypeAttr(interface1, typeattr);
3290 ITypeInfo_Release(interface1);
3291 ICreateTypeInfo_Release(createti);
3293 hres = ICreateTypeLib2_SaveAllChanges(createtl);
3296 ok(ICreateTypeLib2_Release(createtl)==0,
"Object should be freed\n");
3298 ok(ITypeInfo_Release(
dispatch)==0,
"Object should be freed\n");
3299 ok(ITypeInfo_Release(
unknown)==0,
"Object should be freed\n");
3300 ok(ITypeLib_Release(
stdole)==0,
"Object should be freed\n");
3305 hres = ITypeLib_GetLibAttr(tl, &libattr);
3307 ok(libattr->syskind == sys,
"syskind = %d\n", libattr->syskind);
3308 ok(libattr->wMajorVerNum == 0,
"wMajorVer = %d\n", libattr->wMajorVerNum);
3309 ok(libattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", libattr->wMinorVerNum);
3311 ITypeLib_ReleaseTLibAttr(tl, libattr);
3314 memset(tinfos, 0,
sizeof(tinfos));
3315 memids[0] = 0xdeadbeef;
3316 memids[1] = 0xdeadbeef;
3317 hres = ITypeLib_FindName(tl, param1W, 0, tinfos, memids, &found);
3319 ok(found == 0,
"got wrong count: %u\n", found);
3320 ok(tinfos[0] ==
NULL,
"got invalid typeinfo[0]\n");
3321 ok(tinfos[1] ==
NULL,
"got invalid typeinfo[1]\n");
3322 ok(memids[0] == 0xdeadbeef,
"got invalid memid[0]\n");
3323 ok(memids[1] == 0xdeadbeef,
"got invalid memid[1]\n");
3326 memset(tinfos, 0,
sizeof(tinfos));
3327 memids[0] = 0xdeadbeef;
3328 memids[1] = 0xdeadbeef;
3329 hres = ITypeLib_FindName(tl, func1W, 0, tinfos, memids, &found);
3331 ok(found == 1,
"got wrong count: %u\n", found);
3332 ok(tinfos[0] !=
NULL,
"got invalid typeinfo[0]\n");
3333 ok(tinfos[1] ==
NULL,
"got invalid typeinfo[1]\n");
3334 ok(memids[0] == 0,
"got invalid memid[0]\n");
3335 ok(memids[1] == 0xdeadbeef,
"got invalid memid[1]\n");
3337 ITypeInfo_Release(tinfos[0]);
3340 memset(tinfos, 0,
sizeof(tinfos));
3341 memids[0] = 0xdeadbeef;
3342 memids[1] = 0xdeadbeef;
3343 hres = ITypeLib_FindName(tl, interface1W, 0, tinfos, memids, &found);
3345 ok(found == 1,
"got wrong count: %u\n", found);
3346 ok(tinfos[0] !=
NULL,
"got invalid typeinfo[0]\n");
3347 ok(tinfos[1] ==
NULL,
"got invalid typeinfo[1]\n");
3348 ok(memids[0] ==
MEMBERID_NIL,
"got invalid memid[0]: %lx\n", memids[0]);
3349 ok(memids[1] == 0xdeadbeef,
"got invalid memid[1]\n");
3351 ITypeInfo_Release(tinfos[0]);
3353 hres = ITypeLib_GetDocumentation(tl, -1, &
name, &docstring, &helpcontext, &
helpfile);
3355 ok(
memcmp(typelibW,
name,
sizeof(typelibW)) == 0,
"got wrong typelib name: %s\n",
3358 ok(helpcontext == 0,
"got wrong helpcontext: 0x%lx\n", helpcontext);
3364 hres = ITypeLib_GetDocumentation(tl, 0, &
name, &docstring, &helpcontext, &
helpfile);
3366 ok(
memcmp(interface1W,
name,
sizeof(interface1W)) == 0,
"got wrong typeinfo name: %s\n",
3369 ok(helpcontext == 0,
"got wrong helpcontext: 0x%lx\n", helpcontext);
3375 hres = ITypeLib_QueryInterface(tl, &IID_ITypeLib2, (
void**)&tl2);
3378 V_I4(&cust_data) = 0;
3379 hres = ITypeLib2_GetCustData(tl2, &tlcustguid, &cust_data);
3381 ok(
V_VT(&cust_data) ==
VT_I4,
"V_VT(&cust_data) = %d\n",
V_VT(&cust_data));
3382 ok(
V_I4(&cust_data) == 1,
"V_I4(&cust_data) = %ld\n",
V_I4(&cust_data));
3383 ITypeLib2_Release(tl2);
3385 hres = ITypeLib_GetTypeInfo(tl, 0, &ti);
3388 hres = ITypeInfo_GetTypeAttr(ti, &typeattr);
3390 ok(typeattr->cbSizeInstance ==
sizeof(
void*),
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
3391 ok(typeattr->typekind ==
TKIND_INTERFACE,
"typekind = %d\n", typeattr->typekind);
3392 ok(typeattr->cFuncs == 13,
"cFuncs = %d\n", typeattr->cFuncs);
3393 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
3394 ok(typeattr->cImplTypes == 1,
"cImplTypes = %d\n", typeattr->cImplTypes);
3396 ok(typeattr->cbSizeVft == 16 *
sizeof(
void*),
"cbSizeVft = %d\n", typeattr->cbSizeVft);
3397 ok(typeattr->cbAlignment ==
alignment,
"cbAlignment = %d\n", typeattr->cbAlignment);
3398 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = %d\n", typeattr->wTypeFlags);
3399 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
3400 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
3401 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
3403 hres = ITypeInfo_GetRefTypeOfImplType(ti, 0, &hreftype);
3405 ok(hreftype == 3,
"hreftype = %ld\n", hreftype);
3407 hres = ITypeInfo_GetRefTypeInfo(ti, hreftype, &
unknown);
3413 ITypeInfo_ReleaseTypeAttr(
unknown, typeattr);
3417 hres = ITypeInfo_GetFuncDesc(ti, 0, &pfuncdesc);
3419 ok(pfuncdesc->memid == 0,
"got %lx\n", pfuncdesc->memid);
3420 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3421 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3422 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3423 ok(pfuncdesc->invkind == INVOKE_PROPERTYPUTREF,
"got 0x%x\n", pfuncdesc->invkind);
3424 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3425 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
3426 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3427 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3428 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3429 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3430 edesc = pfuncdesc->lprgelemdescParam;
3431 ok(edesc->tdesc.vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.vt);
3432 ok(edesc->idldesc.wIDLFlags == IDLFLAG_FIN,
"got: %x\n", edesc->idldesc.wIDLFlags);
3434 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3438 ok(helpcontext == 0x201,
"got helpcontext: 0x%lx\n", helpcontext);
3443 hres = ITypeInfo_GetNames(ti, pfuncdesc->memid,
NULL, 0, &cnames);
3447 hres = ITypeInfo_GetNames(ti, pfuncdesc->memid,
names, 0, &cnames);
3449 ok(cnames == 0,
"got: %u\n", cnames);
3453 ok(cnames == 1,
"got: %u\n", cnames);
3457 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3459 hres = ITypeInfo_GetFuncDesc(ti, 1, &pfuncdesc);
3461 ok(pfuncdesc->memid == 0x60010001,
"got %lx\n", pfuncdesc->memid);
3462 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3463 ok(pfuncdesc->lprgelemdescParam ==
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3464 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3465 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3466 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3467 ok(pfuncdesc->cParams == 0,
"got %d\n", pfuncdesc->cParams);
3468 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3470 ok(pfuncdesc->oVft == 4 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3471 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3472 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3473 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3475 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3479 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3482 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3484 hres = ITypeInfo_GetFuncDesc(ti, 2, &pfuncdesc);
3486 ok(pfuncdesc->memid == 0x1,
"got %lx\n", pfuncdesc->memid);
3487 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3488 ok(pfuncdesc->lprgelemdescParam ==
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3489 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3490 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3491 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3492 ok(pfuncdesc->cParams == 0,
"got %d\n", pfuncdesc->cParams);
3493 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3495 ok(pfuncdesc->oVft == 5 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3496 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3497 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3498 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3500 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3504 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3507 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3509 hres = ITypeInfo_GetFuncDesc(ti, 3, &pfuncdesc);
3511 ok(pfuncdesc->memid == 0x6001000b,
"got %lx\n", pfuncdesc->memid);
3512 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3513 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3514 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3515 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3516 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3517 ok(pfuncdesc->cParams == 2,
"got %d\n", pfuncdesc->cParams);
3518 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3520 ok(pfuncdesc->oVft == 6 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3521 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3522 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3523 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3525 edesc = pfuncdesc->lprgelemdescParam;
3526 ok(edesc->tdesc.vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.vt);
3527 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
3528 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3529 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3530 edesc->paramdesc.pparamdescex->cBytes);
3531 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_BSTR,
"got: %d\n",
3532 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3537 edesc = pfuncdesc->lprgelemdescParam + 1;
3538 ok(edesc->tdesc.vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.vt);
3539 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
3540 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3541 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3542 edesc->paramdesc.pparamdescex->cBytes);
3543 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_BSTR,
"got: %d\n",
3544 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3549 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3553 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3560 ok(cnames == 3,
"got: %u\n", cnames);
3567 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3569 hres = ITypeInfo_GetFuncDesc(ti, 4, &pfuncdesc);
3571 ok(pfuncdesc->memid == 0x6001000c,
"got %lx\n", pfuncdesc->memid);
3572 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3573 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3574 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3575 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3576 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3577 ok(pfuncdesc->cParams == 2,
"got %d\n", pfuncdesc->cParams);
3578 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3580 ok(pfuncdesc->oVft == 7 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3581 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3582 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3583 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3585 edesc = pfuncdesc->lprgelemdescParam;
3586 ok(edesc->tdesc.vt ==
VT_INT,
"got: %d\n", edesc->tdesc.vt);
3587 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
3588 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3589 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3590 edesc->paramdesc.pparamdescex->cBytes);
3591 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_I4,
"got: %d\n",
3592 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3593 ok(
V_I4(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0xFFFFFFFF,
3594 "got: 0x%lx\n",
V_I4(&edesc->paramdesc.pparamdescex->varDefaultValue));
3596 edesc = pfuncdesc->lprgelemdescParam + 1;
3597 ok(edesc->tdesc.vt ==
VT_INT,
"got: %d\n", edesc->tdesc.vt);
3598 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
3599 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3600 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3601 edesc->paramdesc.pparamdescex->cBytes);
3602 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_I4,
"got: %d\n",
3603 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3604 ok(
V_I4(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0xFFFFFFFF,
3605 "got: 0x%lx\n",
V_I4(&edesc->paramdesc.pparamdescex->varDefaultValue));
3607 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3611 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3614 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3616 hres = ITypeInfo_GetFuncDesc(ti, 5, &pfuncdesc);
3618 ok(pfuncdesc->memid == 0x60010005,
"got %lx\n", pfuncdesc->memid);
3619 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3620 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3621 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3622 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3623 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3624 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
3625 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3627 ok(pfuncdesc->oVft == 8 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3628 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3629 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3630 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3632 edesc = pfuncdesc->lprgelemdescParam;
3633 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3634 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3635 edesc->paramdesc.pparamdescex->cBytes);
3636 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_INT,
"got: %d\n",
3637 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3638 ok(
V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0x789,
"got: 0x%x\n",
3639 V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue));
3640 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
3641 "got: 0x%x\n", edesc->paramdesc.wParamFlags);
3643 ok(edesc->tdesc.hreftype == hreftype,
"got: 0x%lx\n", edesc->tdesc.hreftype);
3645 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3649 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3652 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3654 hres = ITypeInfo_GetFuncDesc(ti, 6, &pfuncdesc);
3656 ok(pfuncdesc->memid == 0x60010006,
"got %lx\n", pfuncdesc->memid);
3657 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3658 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3659 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3660 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3661 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3662 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
3663 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3665 ok(pfuncdesc->oVft == 9 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3666 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3667 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VARIANT,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3668 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3670 edesc = pfuncdesc->lprgelemdescParam;
3671 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3672 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3673 edesc->paramdesc.pparamdescex->cBytes);
3674 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_INT,
"got: %d\n",
3675 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3676 ok(
V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0x3,
"got: 0x%x\n",
3677 V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue));
3678 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
3679 "got: 0x%x\n", edesc->paramdesc.wParamFlags);
3680 ok(edesc->tdesc.vt ==
VT_VARIANT,
"got: %d\n", edesc->tdesc.vt);
3681 ok(edesc->tdesc.hreftype == 0,
"got: 0x%lx\n", edesc->tdesc.hreftype);
3683 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3687 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3690 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3692 hres = ITypeInfo_GetFuncDesc(ti, 7, &pfuncdesc);
3694 ok(pfuncdesc->memid == 0x60010009,
"got %lx\n", pfuncdesc->memid);
3695 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3696 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3697 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3698 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3699 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3700 ok(pfuncdesc->cParams == 2,
"got %d\n", pfuncdesc->cParams);
3701 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3703 ok(pfuncdesc->oVft == 10 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3704 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3705 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3706 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3708 edesc = pfuncdesc->lprgelemdescParam;
3709 ok(edesc->tdesc.vt ==
VT_INT,
"got: %d\n", edesc->tdesc.vt);
3710 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FIN,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
3711 ok(edesc->paramdesc.pparamdescex ==
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3713 edesc = pfuncdesc->lprgelemdescParam + 1;
3714 ok(edesc->tdesc.vt ==
VT_UI2,
"got: %d\n", edesc->tdesc.vt);
3715 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
3716 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3717 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3718 edesc->paramdesc.pparamdescex->cBytes);
3719 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_UI2,
"got: %d\n",
3720 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3721 ok(
V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0xFFFF,
"got: 0x%x\n",
3722 V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue));
3724 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3728 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3731 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3733 hres = ITypeInfo_GetFuncDesc(ti, 8, &pfuncdesc);
3735 ok(pfuncdesc->memid == 0x60010003,
"got %lx\n", pfuncdesc->memid);
3736 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3737 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3738 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3739 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3740 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3741 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
3742 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3744 ok(pfuncdesc->oVft == 11 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3745 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3746 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3747 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3749 edesc = pfuncdesc->lprgelemdescParam;
3750 ok(edesc->tdesc.vt ==
VT_INT,
"got: %d\n", edesc->tdesc.vt);
3751 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
3752 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3753 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3754 edesc->paramdesc.pparamdescex->cBytes);
3755 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_I4,
"got: %d\n",
3756 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3757 ok(
V_I4(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0x123,
"got: 0x%lx\n",
3758 V_I4(&edesc->paramdesc.pparamdescex->varDefaultValue));
3760 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3764 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3767 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3769 hres = ITypeInfo_GetFuncDesc(ti, 9, &pfuncdesc);
3771 ok(pfuncdesc->memid == 0,
"got %lx\n", pfuncdesc->memid);
3772 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3773 ok(pfuncdesc->lprgelemdescParam ==
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3774 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3775 ok(pfuncdesc->invkind == INVOKE_PROPERTYGET,
"got 0x%x\n", pfuncdesc->invkind);
3776 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3777 ok(pfuncdesc->cParams == 0,
"got %d\n", pfuncdesc->cParams);
3778 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3780 ok(pfuncdesc->oVft == 12 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3781 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3782 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_BSTR,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3783 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3785 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3789 ok(helpcontext == 0x201,
"got helpcontext: 0x%lx\n", helpcontext);
3796 ok(cnames == 1,
"got: %u\n", cnames);
3799 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3801 hres = ITypeInfo_GetFuncDesc(ti, 10, &pfuncdesc);
3803 ok(pfuncdesc->memid == 0x60010007,
"got %lx\n", pfuncdesc->memid);
3804 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3805 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3806 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3807 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3808 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3809 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
3810 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3812 ok(pfuncdesc->oVft == 13 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3813 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3814 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3815 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3817 edesc = pfuncdesc->lprgelemdescParam;
3818 ok(edesc->tdesc.vt ==
VT_PTR,
"got: %d\n", edesc->tdesc.vt);
3819 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FIN,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
3820 ok(edesc->paramdesc.pparamdescex ==
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3821 ok(edesc->tdesc.lptdesc !=
NULL,
"got: %p\n", edesc->tdesc.lptdesc);
3822 ok(edesc->tdesc.lptdesc->vt ==
VT_PTR,
"got: %d\n", edesc->tdesc.lptdesc->vt);
3823 ok(edesc->tdesc.lptdesc->lptdesc !=
NULL,
"got: %p\n", edesc->tdesc.lptdesc->lptdesc);
3824 ok(edesc->tdesc.lptdesc->lptdesc->vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.lptdesc->lptdesc->vt);
3826 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3830 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3833 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3835 hres = ITypeInfo_GetFuncDesc(ti, 11, &pfuncdesc);
3837 ok(pfuncdesc->memid == 0x60010004,
"got %lx\n", pfuncdesc->memid);
3838 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3839 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3840 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3841 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3842 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3843 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
3844 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3846 ok(pfuncdesc->oVft == 14 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3847 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3848 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3849 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3851 edesc = pfuncdesc->lprgelemdescParam;
3852 ok(edesc->tdesc.vt ==
VT_PTR,
"got: %d\n", edesc->tdesc.vt);
3853 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FIN,
"got: 0x%x\n", edesc->paramdesc.wParamFlags);
3854 ok(edesc->paramdesc.pparamdescex ==
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3855 ok(edesc->tdesc.lptdesc !=
NULL,
"got: %p\n", edesc->tdesc.lptdesc);
3856 ok(edesc->tdesc.lptdesc->vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.lptdesc->vt);
3858 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3862 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3865 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3867 hres = ITypeInfo_GetFuncDesc(ti, 12, &pfuncdesc);
3869 ok(pfuncdesc->memid == 0,
"got %lx\n", pfuncdesc->memid);
3870 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3871 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3872 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3873 ok(pfuncdesc->invkind == INVOKE_PROPERTYPUT,
"got 0x%x\n", pfuncdesc->invkind);
3874 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3875 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
3876 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3878 ok(pfuncdesc->oVft == 15 *
sizeof(
void*),
"got %d\n", pfuncdesc->oVft);
3879 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3880 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3881 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3883 edesc = pfuncdesc->lprgelemdescParam;
3884 ok(edesc->tdesc.vt ==
VT_BSTR,
"got: %d\n", edesc->tdesc.vt);
3885 ok(edesc->idldesc.wIDLFlags == IDLFLAG_FIN,
"got: %x\n", edesc->idldesc.wIDLFlags);
3887 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3891 ok(helpcontext == 0x201,
"got helpcontext: 0x%lx\n", helpcontext);
3898 ok(cnames == 1,
"got: %u\n", cnames);
3901 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3903 hres = ITypeInfo_GetFuncDesc(ti, 13, &pfuncdesc);
3906 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
3908 hres = ITypeLib_GetTypeInfo(tl, 1, &ti);
3911 hres = ITypeInfo_GetTypeAttr(ti, &typeattr);
3913 ok(typeattr->cbSizeInstance ==
sizeof(
void*),
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
3914 ok(typeattr->typekind ==
TKIND_INTERFACE,
"typekind = %d\n", typeattr->typekind);
3915 ok(typeattr->cFuncs == 2,
"cFuncs = %d\n", typeattr->cFuncs);
3916 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
3917 ok(typeattr->cImplTypes == 1,
"cImplTypes = %d\n", typeattr->cImplTypes);
3918 ok(typeattr->cbSizeVft == 0xaab8 || typeattr->cbSizeVft == 0xaab0 ||
3919 typeattr->cbSizeVft == 0x555c || typeattr->cbSizeVft == 0x5560,
3920 "cbSizeVft = 0x%x\n", typeattr->cbSizeVft);
3921 ok(typeattr->cbAlignment ==
alignment,
"cbAlignment = %d\n", typeattr->cbAlignment);
3922 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = %d\n", typeattr->wTypeFlags);
3923 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
3924 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
3925 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
3927 hres = ITypeInfo_GetRefTypeOfImplType(ti, 0, &hreftype);
3930 hres = ITypeInfo_GetFuncDesc(ti, 0, &pfuncdesc);
3932 ok(pfuncdesc->memid == 0x60020000,
"got %lx\n", pfuncdesc->memid);
3933 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3934 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3935 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3936 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3937 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3938 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
3939 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3940 ok(pfuncdesc->oVft == (
short)(0xaaa8 *
sizeof(
void *) /
ptr_size),
"got %x\n", pfuncdesc->oVft);
3941 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3942 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3943 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3945 edesc = pfuncdesc->lprgelemdescParam;
3946 ok(edesc->tdesc.vt ==
VT_VARIANT,
"got: %d\n", edesc->tdesc.vt);
3947 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
3948 "got: 0x%x\n", edesc->paramdesc.wParamFlags);
3949 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3950 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3951 edesc->paramdesc.pparamdescex->cBytes);
3952 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_INT,
"got: %d\n",
3953 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3954 ok(
V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0x3,
"got: 0x%x\n",
3955 V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue));
3956 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
3957 "got: 0x%x\n", edesc->paramdesc.wParamFlags);
3958 ok(edesc->tdesc.lptdesc ==
NULL,
"got: %p\n", edesc->tdesc.lptdesc);
3959 ok(edesc->tdesc.hreftype == 0,
"got: %ld\n", edesc->tdesc.hreftype);
3960 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3962 hres = ITypeInfo_GetFuncDesc(ti, 1, &pfuncdesc);
3964 ok(pfuncdesc->memid == 0x60020001,
"got %lx\n", pfuncdesc->memid);
3965 ok(pfuncdesc->lprgscode ==
NULL,
"got %p\n", pfuncdesc->lprgscode);
3966 ok(pfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", pfuncdesc->lprgelemdescParam);
3967 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got 0x%x\n", pfuncdesc->funckind);
3968 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", pfuncdesc->invkind);
3969 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", pfuncdesc->callconv);
3970 ok(pfuncdesc->cParams == 1,
"got %d\n", pfuncdesc->cParams);
3971 ok(pfuncdesc->cParamsOpt == 0,
"got %d\n", pfuncdesc->cParamsOpt);
3972 ok(pfuncdesc->oVft == (
short)((sys ==
SYS_WIN64 ? 0xaab0 : 0xaaac) *
sizeof(
void *) /
ptr_size),
"got %x\n", pfuncdesc->oVft);
3973 ok(pfuncdesc->cScodes == 0,
"got %d\n", pfuncdesc->cScodes);
3974 ok(pfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", pfuncdesc->elemdescFunc.tdesc.vt);
3975 ok(pfuncdesc->wFuncFlags == 0,
"got 0x%x\n", pfuncdesc->wFuncFlags);
3977 edesc = pfuncdesc->lprgelemdescParam;
3978 ok(edesc->tdesc.vt ==
VT_VARIANT,
"got: %d\n", edesc->tdesc.vt);
3979 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
3980 "got: 0x%x\n", edesc->paramdesc.wParamFlags);
3981 ok(edesc->paramdesc.pparamdescex !=
NULL,
"got: %p\n", edesc->paramdesc.pparamdescex);
3982 ok(edesc->paramdesc.pparamdescex->cBytes ==
sizeof(PARAMDESCEX),
"got: %ld\n",
3983 edesc->paramdesc.pparamdescex->cBytes);
3984 ok(
V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue) ==
VT_INT,
"got: %d\n",
3985 V_VT(&edesc->paramdesc.pparamdescex->varDefaultValue));
3986 ok(
V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue) == 0x3,
"got: 0x%x\n",
3987 V_UI2(&edesc->paramdesc.pparamdescex->varDefaultValue));
3988 ok(edesc->paramdesc.wParamFlags == PARAMFLAG_FHASDEFAULT,
3989 "got: 0x%x\n", edesc->paramdesc.wParamFlags);
3990 ok(edesc->tdesc.lptdesc ==
NULL,
"got: %p\n", edesc->tdesc.lptdesc);
3991 ok(edesc->tdesc.hreftype == 0,
"got: %ld\n", edesc->tdesc.hreftype);
3992 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3994 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
3996 hres = ITypeLib_GetTypeInfo(tl, 2, &ti);
3999 hres = ITypeInfo_QueryInterface(ti, &IID_ITypeInfo2, (
void**)&ti2);
4002 hres = ITypeInfo_GetTypeAttr(ti, &typeattr);
4004 ok(typeattr->cbSizeInstance ==
sizeof(
void*),
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
4005 ok(typeattr->typekind ==
TKIND_INTERFACE,
"typekind = %d\n", typeattr->typekind);
4006 ok(typeattr->cFuncs == 0,
"cFuncs = %d\n", typeattr->cFuncs);
4007 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
4008 ok(typeattr->cImplTypes == 0,
"cImplTypes = %d\n", typeattr->cImplTypes);
4009 ok(typeattr->cbSizeVft == 0,
"cbSizeVft = %d\n", typeattr->cbSizeVft);
4010 ok(typeattr->cbAlignment ==
alignment,
"cbAlignment = %d\n", typeattr->cbAlignment);
4011 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = %d\n", typeattr->wTypeFlags);
4012 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
4013 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
4014 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
4017 hres = ITypeInfo2_GetCustData(ti2, &custguid, &cust_data);
4019 ok(
V_VT(&cust_data) ==
VT_BSTR,
"got wrong custdata type: %u\n",
V_VT(&cust_data));
4023 ITypeInfo2_Release(ti2);
4024 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
4026 hres = ITypeLib_GetTypeInfo(tl, 3, &ti);
4029 hres = ITypeInfo_GetTypeAttr(ti, &typeattr);
4031 ok(typeattr->cbSizeInstance ==
sizeof(
void*),
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
4032 ok(typeattr->typekind ==
TKIND_COCLASS,
"typekind = %d\n", typeattr->typekind);
4033 ok(typeattr->cFuncs == 0,
"cFuncs = %d\n", typeattr->cFuncs);
4034 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
4035 ok(typeattr->cImplTypes == 3,
"cImplTypes = %d\n", typeattr->cImplTypes);
4036 ok(typeattr->cbSizeVft == 0,
"cbSizeVft = %d\n", typeattr->cbSizeVft);
4037 ok(typeattr->cbAlignment ==
alignment,
"cbAlignment = %d\n", typeattr->cbAlignment);
4038 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = %d\n", typeattr->wTypeFlags);
4039 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
4040 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
4041 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
4043 hres = ITypeInfo_GetRefTypeOfImplType(ti, 0, &hreftype);
4045 ok(hreftype == 0,
"got wrong hreftype: %lx\n", hreftype);
4047 hres = ITypeInfo_GetImplTypeFlags(ti, 0, &impltypeflags);
4049 ok(impltypeflags == IMPLTYPEFLAG_FDEFAULT,
"got wrong flag: %x\n", impltypeflags);
4051 hres = ITypeInfo_GetRefTypeOfImplType(ti, 1, &hreftype);
4053 ok(hreftype == 1,
"got wrong hreftype: %lx\n", hreftype);
4055 hres = ITypeInfo_GetImplTypeFlags(ti, 1, &impltypeflags);
4057 ok(impltypeflags == IMPLTYPEFLAG_FRESTRICTED,
"got wrong flag: %x\n", impltypeflags);
4059 hres = ITypeInfo_GetRefTypeOfImplType(ti, 2, &hreftype);
4061 ok(hreftype == 1,
"got wrong hreftype: %lx\n", hreftype);
4063 hres = ITypeInfo_GetImplTypeFlags(ti, 2, &impltypeflags);
4065 ok(impltypeflags == 0,
"got wrong flag: %x\n", impltypeflags);
4067 hres = ITypeInfo_GetRefTypeOfImplType(ti, 3, &hreftype);
4070 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
4072 hres = ITypeLib_GetTypeInfo(tl, 4, &ti);
4075 hres = ITypeInfo_GetTypeAttr(ti, &typeattr);
4077 ok(typeattr->cbSizeInstance ==
sizeof(
void*),
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
4078 ok(typeattr->typekind ==
TKIND_DISPATCH,
"typekind = %d\n", typeattr->typekind);
4080 ok(typeattr->cFuncs == 8,
"cFuncs = %d\n", typeattr->cFuncs);
4081 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
4082 ok(typeattr->cImplTypes == 1,
"cImplTypes = %d\n", typeattr->cImplTypes);
4083 ok(typeattr->cbSizeVft == 7 *
sizeof(
void*),
"cbSizeVft = %d\n", typeattr->cbSizeVft);
4084 ok(typeattr->cbAlignment ==
alignment,
"cbAlignment = %d\n", typeattr->cbAlignment);
4085 ok(typeattr->wTypeFlags == (TYPEFLAG_FDISPATCHABLE | TYPEFLAG_FDUAL),
"wTypeFlags = 0x%x\n", typeattr->wTypeFlags);
4086 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
4087 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
4088 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
4090 hres = ITypeInfo_GetTypeComp(ti, &tcomp);
4093 hres = ITypeInfo_QueryInterface(ti, &IID_ITypeComp, (
void**)&tcomp2);
4095 ok(tcomp == tcomp2,
"got %p, was %p\n", tcomp2, tcomp);
4096 ITypeComp_Release(tcomp2);
4098 hres = ITypeComp_Bind(tcomp, invokeW, 0, INVOKE_FUNC, &interface1, &desckind, &bindptr);
4100 ok(desckind == DESCKIND_FUNCDESC,
"got wrong desckind: 0x%x\n", desckind);
4101 ok(bindptr.lpfuncdesc->memid == 0x60010003,
"got %lx\n", bindptr.lpfuncdesc->memid);
4102 ok(bindptr.lpfuncdesc->lprgscode ==
NULL,
"got %p\n", bindptr.lpfuncdesc->lprgscode);
4103 ok(bindptr.lpfuncdesc->lprgelemdescParam !=
NULL,
"got %p\n", bindptr.lpfuncdesc->lprgelemdescParam);
4104 ok(bindptr.lpfuncdesc->funckind == FUNC_DISPATCH,
"got 0x%x\n", bindptr.lpfuncdesc->funckind);
4105 ok(bindptr.lpfuncdesc->invkind == INVOKE_FUNC,
"got 0x%x\n", bindptr.lpfuncdesc->invkind);
4106 ok(bindptr.lpfuncdesc->callconv ==
CC_STDCALL,
"got 0x%x\n", bindptr.lpfuncdesc->callconv);
4107 ok(bindptr.lpfuncdesc->cParams == 8,
"got %d\n", bindptr.lpfuncdesc->cParams);
4108 ok(bindptr.lpfuncdesc->cParamsOpt == 0,
"got %d\n", bindptr.lpfuncdesc->cParamsOpt);
4109 ok(bindptr.lpfuncdesc->oVft == 6 *
sizeof(
void*),
"got %x\n", bindptr.lpfuncdesc->oVft);
4110 ok(bindptr.lpfuncdesc->cScodes == 0,
"got %d\n", bindptr.lpfuncdesc->cScodes);
4111 ok(bindptr.lpfuncdesc->elemdescFunc.tdesc.vt ==
VT_VOID,
"got %d\n", bindptr.lpfuncdesc->elemdescFunc.tdesc.vt);
4112 ok(bindptr.lpfuncdesc->wFuncFlags == FUNCFLAG_FRESTRICTED,
"got 0x%x\n", bindptr.lpfuncdesc->wFuncFlags);
4114 ITypeInfo_ReleaseFuncDesc(interface1, bindptr.lpfuncdesc);
4115 ITypeInfo_Release(interface1);
4116 ITypeComp_Release(tcomp);
4118 hres = ITypeInfo_GetRefTypeOfImplType(ti, -1, &hreftype);
4120 ok(hreftype == -2,
"got wrong hreftype: %lx\n", hreftype);
4122 hres = ITypeInfo_GetRefTypeInfo(ti, hreftype, &interface1);
4125 hres = ITypeInfo_GetTypeAttr(interface1, &typeattr);
4127 ok(typeattr->cbSizeInstance ==
sizeof(
void*),
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
4128 ok(typeattr->typekind ==
TKIND_INTERFACE,
"typekind = %d\n", typeattr->typekind);
4129 ok(typeattr->cFuncs == 1,
"cFuncs = %d\n", typeattr->cFuncs);
4130 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
4131 ok(typeattr->cImplTypes == 1,
"cImplTypes = %d\n", typeattr->cImplTypes);
4133 ok(typeattr->cbSizeVft == 8 *
sizeof(
void*),
"cbSizeVft = %d\n", typeattr->cbSizeVft);
4134 ok(typeattr->cbAlignment ==
alignment,
"cbAlignment = %d\n", typeattr->cbAlignment);
4135 ok(typeattr->wTypeFlags == (TYPEFLAG_FDISPATCHABLE | TYPEFLAG_FDUAL),
"wTypeFlags = 0x%x\n", typeattr->wTypeFlags);
4136 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
4137 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
4138 ITypeInfo_ReleaseTypeAttr(interface1, typeattr);
4140 ITypeInfo_Release(interface1);
4142 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
4144 hres = ITypeLib_GetTypeInfo(tl, 5, &ti);
4147 hres = ITypeInfo_GetTypeAttr(ti, &typeattr);
4149 ok(typeattr->cbSizeInstance == 8,
"cbSizeInstance = %ld\n", typeattr->cbSizeInstance);
4150 ok(typeattr->typekind ==
TKIND_ALIAS,
"typekind = %d\n", typeattr->typekind);
4151 ok(typeattr->cFuncs == 0,
"cFuncs = %d\n", typeattr->cFuncs);
4152 ok(typeattr->cVars == 0,
"cVars = %d\n", typeattr->cVars);
4153 ok(typeattr->cImplTypes == 0,
"cImplTypes = %d\n", typeattr->cImplTypes);
4154 ok(typeattr->cbSizeVft == 0,
"cbSizeVft = %d\n", typeattr->cbSizeVft);
4155 ok(typeattr->cbAlignment ==
alignment,
"cbAlignment = %d\n", typeattr->cbAlignment);
4156 ok(typeattr->wTypeFlags == 0,
"wTypeFlags = 0x%x\n", typeattr->wTypeFlags);
4157 ok(typeattr->wMajorVerNum == 0,
"wMajorVerNum = %d\n", typeattr->wMajorVerNum);
4158 ok(typeattr->wMinorVerNum == 0,
"wMinorVerNum = %d\n", typeattr->wMinorVerNum);
4159 ok(typeattr->tdescAlias.vt ==
VT_R8,
"Got wrong tdescAlias.vt: %u\n", typeattr->tdescAlias.vt);
4160 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
4162 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
4164 ok(ITypeLib_Release(tl)==0,
"Object should be freed\n");
4172#define OLE_CHECK(x) { HRESULT hr = x; if (FAILED(hr)) { printf(#x "failed - %x\n", hr); return; } }
4174static char *dump_string(
LPWSTR wstr)
4188#define MAP_ENTRY(x) { x, #x }
4189static const struct map_entry tkind_map[] = {
4202static const struct map_entry funckind_map[] = {
4203 MAP_ENTRY(FUNC_VIRTUAL),
4204 MAP_ENTRY(FUNC_PUREVIRTUAL),
4205 MAP_ENTRY(FUNC_NONVIRTUAL),
4206 MAP_ENTRY(FUNC_STATIC),
4207 MAP_ENTRY(FUNC_DISPATCH),
4211static const struct map_entry varkind_map[] = {
4212 MAP_ENTRY(VAR_PERINSTANCE),
4213 MAP_ENTRY(VAR_STATIC),
4214 MAP_ENTRY(VAR_CONST),
4215 MAP_ENTRY(VAR_DISPATCH),
4219static const struct map_entry invkind_map[] = {
4220 MAP_ENTRY(INVOKE_FUNC),
4221 MAP_ENTRY(INVOKE_PROPERTYGET),
4222 MAP_ENTRY(INVOKE_PROPERTYPUT),
4223 MAP_ENTRY(INVOKE_PROPERTYPUTREF),
4227static const struct map_entry callconv_map[] = {
4230 MAP_ENTRY(CC_PASCAL),
4231 MAP_ENTRY(CC_MACPASCAL),
4233 MAP_ENTRY(CC_FPFASTCALL),
4234 MAP_ENTRY(CC_SYSCALL),
4235 MAP_ENTRY(CC_MPWCDECL),
4236 MAP_ENTRY(CC_MPWPASCAL),
4240static const struct map_entry vt_map[] = {
4315static const char *map_value(
int val,
const struct map_entry *
map)
4318 static char bufs[16][256];
4333static const char *dump_type_flags(
DWORD flags)
4335 static char buf[256];
4337 if (!
flags)
return "0";
4341#define ADD_FLAG(x) if (flags & x) { if (buf[0]) strcat(buf, "|"); strcat(buf, #x); flags &= ~x; }
4367 static char buf[256];
4369 switch (
attr->typekind)
4402 static char buf[256];
4404 switch (
attr->typekind)
4435static const char *dump_param_flags(
DWORD flags)
4437 static char buf[256];
4439 if (!
flags)
return "PARAMFLAG_NONE";
4443#define ADD_FLAG(x) if (flags & x) { if (buf[0]) strcat(buf, "|"); strcat(buf, #x); flags &= ~x; }
4459static const char *dump_func_flags(
DWORD flags)
4461 static char buf[256];
4463 if (!
flags)
return "0";
4467#define ADD_FLAG(x) if (flags & x) { if (buf[0]) strcat(buf, "|"); strcat(buf, #x); flags &= ~x; }
4475 ADD_FLAG(FUNCFLAG_FUSESGETLASTERROR)
4476 ADD_FLAG(FUNCFLAG_FDEFAULTCOLLELEM)
4489static const char *dump_var_flags(
DWORD flags)
4491 static char buf[256];
4493 if (!
flags)
return "0";
4497#define ADD_FLAG(x) if (flags & x) { if (buf[0]) strcat(buf, "|"); strcat(buf, #x); flags &= ~x; }
4519static const char *dump_variant_info(
const VARIANT *
v)
4521 const char *vt_str = map_value(
V_VT(
v), vt_map);
4522 static char buf[256];
4542 printf(
"failed - dump_variant_info: cannot serialize %s\n", vt_str);
4543 sprintf(
buf,
"{ %s, { /* cannot dump */ } }", vt_str);
4548static const char *dump_custdata_info(LPCUSTDATAITEM
item) {
4549 static char buf[256];
4564 hr = ITypeInfo_GetRefTypeInfo(
info, tdesc->hreftype, &
param);
4565 ok(
hr ==
S_OK,
"GetRefTypeInfo error %#x\n",
hr);
4567 ok(
hr ==
S_OK,
"GetTypeAttr error %#x\n",
hr);
4569 href_type =
attr->typekind;
4572 ITypeInfo_Release(
param);
4585 HREFTYPE hRefType = 0;
4590 printf(
"/*** Autogenerated data. Do not edit, change the generator above instead. ***/\n");
4592 count = ITypeLib_GetTypeInfoCount(lib);
4598 int f = 0,
v = 0,
c = 0;
4600 OLE_CHECK(ITypeLib_GetDocumentation(lib,
i, &
name,
NULL, &help_ctx,
NULL));
4602 " \"%s\",\n", dump_string(
name));
4604 OLE_CHECK(ITypeLib_GetTypeInfo(lib,
i, &
info));
4608 OLE_CHECK(ITypeInfo_GetRefTypeInfo(
info, hRefType, &refInfo));
4609 ITypeInfo_Release(
info);
4612 OLE_CHECK(ITypeInfo_QueryInterface(
info, &IID_ITypeInfo2, (
void**)&info2));
4614 OLE_CHECK(ITypeInfo_GetTypeAttr(
info, &
attr));
4615 OLE_CHECK(ITypeInfo2_GetAllCustData(info2,&cust_data));
4619 printf(
" /*kind*/ %s, /*flags*/ %s, /*align*/ %s, /*size*/ %s,\n"
4620 " /*helpctx*/ 0x%04x, /*version*/ 0x%08x, /*#vtbl*/ %d, /*#func*/ %d, /*#var*/ %d,\n",
4621 map_value(
attr->typekind, tkind_map), dump_type_flags(
attr->wTypeFlags),
4624 attr->cbSizeVft/
sizeof(
void*),
attr->cFuncs,
attr->cVars);
4627 printf(
" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ?
"{" :
"{{0}},");
4629 printf(
" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ?
"{" :
"{},");
4631 for (
c = 0;
c < cust_data.cCustData; ++
c) {
4632 printf(
" %s,\n", dump_custdata_info(&cust_data.prgCustData[
c]));
4634 if (cust_data.cCustData)
printf(
" },\n");
4638 printf(
" { /* funcs */%s",
attr->cFuncs ?
"\n" :
" {0}},\n");
4640 printf(
" { /* funcs */%s",
attr->cFuncs ?
"\n" :
" },\n");
4651 OLE_CHECK(ITypeInfo2_GetAllFuncCustData(info2,
f,&cust_data));
4653 " /*id*/ 0x%x, /*func*/ %s, /*inv*/ %s, /*call*/ %s,\n",
4654 desc->memid, map_value(
desc->funckind, funckind_map), map_value(
desc->invkind, invkind_map),
4655 map_value(
desc->callconv, callconv_map));
4656 printf(
" /*#param*/ %d, /*#opt*/ %d, /*vtbl*/ %d, /*#scodes*/ %d, /*flags*/ %s,\n",
4657 desc->cParams,
desc->cParamsOpt,
desc->oVft/
sizeof(
void*),
desc->cScodes, dump_func_flags(
desc->wFuncFlags));
4658 printf(
" {%s, %s, %s}, /* ret */\n", map_value(
desc->elemdescFunc.tdesc.vt, vt_map),
4659 map_value(get_href_type(
info, &
desc->elemdescFunc.tdesc), tkind_map), dump_param_flags(
U(
desc->elemdescFunc).paramdesc.wParamFlags));
4661 printf(
" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ?
"{" :
"{{0}},");
4663 printf(
" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ?
"{" :
"{},");
4665 for (
c = 0;
c < cust_data.cCustData; ++
c) {
4666 printf(
" %s,\n", dump_custdata_info(&cust_data.prgCustData[
c]));
4668 if (cust_data.cCustData)
printf(
" },\n");
4671 printf(
" { /* params */\n");
4672 for (
p = 0;
p <
desc->cParams;
p++)
4674 ELEMDESC
e =
desc->lprgelemdescParam[
p];
4675 OLE_CHECK(ITypeInfo2_GetAllParamCustData(info2,
f,
p,&cust_data));
4676 printf(
" {%s, %s, %s", map_value(
e.tdesc.vt, vt_map),
4677 map_value(get_href_type(
info, &
e.tdesc), tkind_map), dump_param_flags(
e.paramdesc.wParamFlags));
4678 if (cust_data.cCustData) {
4679 printf(
", /*#custdata*/ %d, {\n", cust_data.cCustData);
4680 for (
c = 0;
c < cust_data.cCustData; ++
c) {
4681 printf(
" %s,\n", dump_custdata_info(&cust_data.prgCustData[
c]));
4691 printf(
" { /* names */\n");
4692 OLE_CHECK(ITypeInfo_GetNames(
info,
desc->memid,
tab, 256, &cNames));
4693 for (
p = 0;
p < cNames;
p++)
4701 ITypeInfo_ReleaseFuncDesc(
info,
desc);
4707 printf(
" { /* vars */%s",
attr->cVars ?
"\n" :
" {0}},\n");
4709 printf(
" { /* vars */%s",
attr->cVars ?
"\n" :
" },\n");
4718 OLE_CHECK(ITypeInfo2_GetAllVarCustData(info2,
v,&cust_data));
4719 OLE_CHECK(ITypeInfo_GetNames(
info,
desc->memid, &varname, 1, &cNames));
4720 if(cNames!=1) {
printf(
"GetNames failed - VARDESC should have one name, got %d\n", cNames);
return; }
4722 " /*id*/ 0x%x, /*name*/ \"%s\", /*flags*/ %s, /*kind*/ %s,\n",
4723 desc->memid, dump_string(varname), dump_var_flags(
desc->wVarFlags), map_value(
desc->varkind, varkind_map));
4725 if (
desc->varkind == VAR_PERINSTANCE) {
4726 printf(
" { .oInst = %d },\n",
desc->DUMMYUNIONNAME.oInst);
4727 }
else if (
desc->varkind == VAR_CONST) {
4728 printf(
" { .varValue = %s },\n", dump_variant_info(
desc->DUMMYUNIONNAME.lpvarValue));
4731 printf(
" { /* DUMMYUNIONNAME unused*/ 0},\n");
4733 printf(
" { /* DUMMYUNIONNAME unused*/ },\n");
4738 printf(
" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ?
"{" :
"{{0}},");
4740 printf(
" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ?
"{" :
"{},");
4742 for (
c = 0;
c < cust_data.cCustData; ++
c) {
4743 printf(
" %s,\n", dump_custdata_info(&cust_data.prgCustData[
c]));
4745 if (cust_data.cCustData)
printf(
" },\n");
4748 printf(
" {%s, %s, %s}, /* ret */\n", map_value(
desc->elemdescVar.tdesc.vt, vt_map),
4749 map_value(get_href_type(
info, &
desc->elemdescVar.tdesc), tkind_map), dump_param_flags(
U(
desc->elemdescVar).paramdesc.wParamFlags));
4751 ITypeInfo_ReleaseVarDesc(
info,
desc);
4759 SUCCEEDED(ITypeInfo_GetRefTypeOfImplType(
info, -1, &hRefType)))
4769 ITypeInfo_ReleaseTypeAttr(
info,
attr);
4770 ITypeInfo2_Release(info2);
4771 ITypeInfo_Release(
info);
4774 ITypeLib_Release(lib);
4860 "{b14b6bb5-904e-4ff9-b247-bd361f7a0001}",
4862 0x0000, 0x00000000, 0, 0, 1,
4867 0x40000000,
"g1", 0, VAR_PERINSTANCE,
4870 {
VT_INT, -1, PARAMFLAG_NONE},
4876 "{b14b6bb5-904e-4ff9-b247-bd361f7a0002}",
4878 0x0000, 0x00000000, 4, 1, 0,
4882 0x60010000, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
4887 {
VT_PTR, -1, PARAMFLAG_FIN},
4901 "{b14b6bb5-904e-4ff9-b247-bd361f7aa001}",
4903 0x0000, 0x00000000, 4, 1, 0,
4907 0x60010000, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
4912 {
VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
4926 "{b14b6bb5-904e-4ff9-b247-bd361f7aa002}",
4928 0x0000, 0x00000000, 5, 1, 0,
4932 0x60020000, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
4949 "{016fe2ec-b2c8-45f8-b23b-39e53a753903}",
4951 0x0003, 0x00010002, 0, 0, 1,
4956 0x40000000,
"n1", 0, VAR_PERINSTANCE,
4959 {
VT_INT, -1, PARAMFLAG_NONE},
4965 "{016fe2ec-b2c8-45f8-b23b-39e53a753902}",
4967 0x0000, 0x00000000, 0, 0, 0,
4974 "{00000000-0000-0000-0000-000000000000}",
4976 0x0003, 0x00010002, 0, 0, 0,
4983 "{016fe2ec-b2c8-45f8-b23b-39e53a753906}",
4985 0x0003, 0x00000000, 0, 0, 1,
4990 0x40000000,
"m1", 0, VAR_PERINSTANCE,
4993 {
VT_INT, -1, PARAMFLAG_NONE},
4999 "{016fe2ec-b2c8-45f8-b23b-39e53a753905}",
5001 0x0000, 0x00010002, 0, 0, 0,
5008 "{00000000-0000-0000-0000-000000000000}",
5010 0x0003, 0x00000000, 0, 0, 0,
5017 "{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
5019 0x0000, 0x00000000, 7, 8, 0,
5023 0x60000000, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5024 2, 0, 0, 0, FUNCFLAG_FRESTRICTED,
5025 {
VT_VOID, -1, PARAMFLAG_NONE},
5028 {
VT_PTR, -1, PARAMFLAG_FIN},
5029 {
VT_PTR, -1, PARAMFLAG_FOUT},
5040 0x60000001, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5041 0, 0, 1, 0, FUNCFLAG_FRESTRICTED,
5042 {
VT_UI4, -1, PARAMFLAG_NONE},
5053 0x60000002, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5054 0, 0, 2, 0, FUNCFLAG_FRESTRICTED,
5055 {
VT_UI4, -1, PARAMFLAG_NONE},
5066 0x60010000, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5067 1, 0, 3, 0, FUNCFLAG_FRESTRICTED,
5068 {
VT_VOID, -1, PARAMFLAG_NONE},
5071 {
VT_PTR, -1, PARAMFLAG_FOUT},
5081 0x60010001, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5082 3, 0, 4, 0, FUNCFLAG_FRESTRICTED,
5083 {
VT_VOID, -1, PARAMFLAG_NONE},
5087 {
VT_UI4, -1, PARAMFLAG_FIN},
5088 {
VT_PTR, -1, PARAMFLAG_FOUT},
5100 0x60010002, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5101 5, 0, 5, 0, FUNCFLAG_FRESTRICTED,
5102 {
VT_VOID, -1, PARAMFLAG_NONE},
5105 {
VT_PTR, -1, PARAMFLAG_FIN},
5106 {
VT_PTR, -1, PARAMFLAG_FIN},
5108 {
VT_UI4, -1, PARAMFLAG_FIN},
5109 {
VT_PTR, -1, PARAMFLAG_FOUT},
5123 0x60010003, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5124 8, 0, 6, 0, FUNCFLAG_FRESTRICTED,
5125 {
VT_VOID, -1, PARAMFLAG_NONE},
5128 {
VT_I4, -1, PARAMFLAG_FIN},
5129 {
VT_PTR, -1, PARAMFLAG_FIN},
5130 {
VT_UI4, -1, PARAMFLAG_FIN},
5131 {
VT_UI2, -1, PARAMFLAG_FIN},
5132 {
VT_PTR, -1, PARAMFLAG_FIN},
5133 {
VT_PTR, -1, PARAMFLAG_FOUT},
5134 {
VT_PTR, -1, PARAMFLAG_FOUT},
5135 {
VT_PTR, -1, PARAMFLAG_FOUT},
5152 0x60020000, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5154 {
VT_VOID, -1, PARAMFLAG_NONE},
5169 "{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
5171 0x0000, 0x00000000, 8, 1, 0,
5175 0x60020000, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
5192 "{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009}",
5194 0x0000, 0x00000000, 8, 1, 0,
5198 0x60020000, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
5215 "{4029f190-ca4a-4611-aeb9-673983cb96dd}",
5217 0x0000, 0x00000000, 0, 0, 4,
5222 0x40000000,
"hr", 0, VAR_PERINSTANCE,
5228 0x40000001,
"b", 0, VAR_PERINSTANCE,
5231 {
VT_BOOL, -1, PARAMFLAG_NONE},
5234 0x40000002,
"disp", 0, VAR_PERINSTANCE,
5240 0x40000003,
"bstr", 0, VAR_PERINSTANCE,
5243 {
VT_BSTR, -1, PARAMFLAG_NONE},
5249 "{4029f190-ca4a-4611-aeb9-673983cb96de}",
5251 0x0000, 0x00000000, 0, 0, 4,
5256 0x40000000,
"hr", 0, VAR_PERINSTANCE,
5262 0x40000001,
"b", 0, VAR_PERINSTANCE,
5265 {
VT_BOOL, -1, PARAMFLAG_NONE},
5268 0x40000002,
"disp", 0, VAR_PERINSTANCE,
5274 0x40000003,
"bstr", 0, VAR_PERINSTANCE,
5277 {
VT_BSTR, -1, PARAMFLAG_NONE},
5283 "{016fe2ec-b2c8-45f8-b23b-39e53a75396a}",
5285 0x0000, 0x00000000, 0, 0, 0,
5292 "{00000000-0000-0000-0000-000000000000}",
5294 0x0000, 0x00000000, 0, 0, 0,
5301 "{00000000-0000-0000-0000-000000000000}",
5303 0x0000, 0x00000000, 0, 0, 2,
5308 0x40000000,
"a1", 0, VAR_CONST,
5309 { .varValue = {
VT_I4, { .value_int = 0 } } },
5311 {
VT_INT, -1, PARAMFLAG_NONE},
5314 0x40000001,
"a2", 0, VAR_CONST,
5315 { .varValue = {
VT_I4, { .value_int = 1 } } },
5317 {
VT_INT, -1, PARAMFLAG_NONE},
5323 "{00000000-0000-0000-0000-000000000000}",
5325 0x0000, 0x00000000, 0, 0, 2,
5330 0x40000000,
"aa1", 0, VAR_CONST,
5331 { .varValue = {
VT_I4, { .value_int = 0 } } },
5333 {
VT_INT, -1, PARAMFLAG_NONE},
5336 0x40000001,
"aa2", 0, VAR_CONST,
5337 { .varValue = {
VT_I4, { .value_int = 1 } } },
5339 {
VT_INT, -1, PARAMFLAG_NONE},
5345 "{00000000-0000-0000-0000-000000000000}",
5347 0x0000, 0x00000000, 0, 0, 2,
5352 0x40000000,
"b1", 0, VAR_CONST,
5353 { .varValue = {
VT_I4, { .value_int = 0 } } },
5355 {
VT_INT, -1, PARAMFLAG_NONE},
5358 0x40000001,
"b2", 0, VAR_CONST,
5359 { .varValue = {
VT_I4, { .value_int = 1 } } },
5361 {
VT_INT, -1, PARAMFLAG_NONE},
5367 "{00000000-0000-0000-0000-000000000000}",
5369 0x0000, 0x00000000, 0, 0, 2,
5374 0x40000000,
"bb1", 0, VAR_CONST,
5375 { .varValue = {
VT_I4, { .value_int = 0 } } },
5377 {
VT_INT, -1, PARAMFLAG_NONE},
5380 0x40000001,
"bb2", 0, VAR_CONST,
5381 { .varValue = {
VT_I4, { .value_int = 1 } } },
5383 {
VT_INT, -1, PARAMFLAG_NONE},
5389 "{016fe2ec-b2c8-45f8-b23b-39e53a75396b}",
5391 0x0000, 0x00000000, 0, 0, 0,
5398 "{00000000-0000-0000-0000-000000000000}",
5400 0x0000, 0x00000000, 0, 0, 2,
5405 0x40000000,
"c1", 0, VAR_CONST,
5406 { .varValue = {
VT_I4, { .value_int = 0 } } },
5408 {
VT_INT, -1, PARAMFLAG_NONE},
5411 0x40000001,
"c2", 0, VAR_CONST,
5412 { .varValue = {
VT_I4, { .value_int = 1 } } },
5414 {
VT_INT, -1, PARAMFLAG_NONE},
5420 "{016fe2ec-b2c8-45f8-b23b-39e53a75396c}",
5422 0x0000, 0x00000000, 0, 0, 2,
5427 0x40000000,
"cc1", 0, VAR_CONST,
5428 { .varValue = {
VT_I4, { .value_int = 0 } } },
5430 {
VT_INT, -1, PARAMFLAG_NONE},
5433 0x40000001,
"cc2", 0, VAR_CONST,
5434 { .varValue = {
VT_I4, { .value_int = 1 } } },
5436 {
VT_INT, -1, PARAMFLAG_NONE},
5442 "{016fe2ec-b2c8-45f8-b23b-39e53a75396d}",
5444 0x0000, 0x00000000, 0, 0, 0,
5451 "{00000000-0000-0000-0000-000000000000}",
5452 TKIND_ENUM, TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, 4, 4,
5453 0x0000, 0x00000000, 0, 0, 2,
5458 0x40000000,
"d1", 0, VAR_CONST,
5459 { .varValue = {
VT_I4, { .value_int = 0 } } },
5461 {
VT_INT, -1, PARAMFLAG_NONE},
5464 0x40000001,
"d2", 0, VAR_CONST,
5465 { .varValue = {
VT_I4, { .value_int = 1 } } },
5467 {
VT_INT, -1, PARAMFLAG_NONE},
5473 "{016fe2ec-b2c8-45f8-b23b-39e53a75396e}",
5474 TKIND_ENUM, TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, 4, 4,
5475 0x0000, 0x00000000, 0, 0, 2,
5480 0x40000000,
"dd1", 0, VAR_CONST,
5481 { .varValue = {
VT_I4, { .value_int = 0 } } },
5483 {
VT_INT, -1, PARAMFLAG_NONE},
5486 0x40000001,
"dd2", 0, VAR_CONST,
5487 { .varValue = {
VT_I4, { .value_int = 1 } } },
5489 {
VT_INT, -1, PARAMFLAG_NONE},
5495 "{016fe2ec-b2c8-45f8-b23b-39e53a753970}",
5497 0x0000, 0x00000000, 0, 0, 0,
5504 "{00000000-0000-0000-0000-000000000000}",
5506 0x0000, 0x00000000, 0, 0, 1,
5511 0x40000000,
"e1", 0, VAR_PERINSTANCE,
5514 {
VT_INT, -1, PARAMFLAG_NONE},
5520 "{016fe2ec-b2c8-45f8-b23b-39e53a753971}",
5522 0x0000, 0x00000000, 0, 0, 1,
5527 0x40000000,
"ee1", 0, VAR_PERINSTANCE,
5530 {
VT_INT, -1, PARAMFLAG_NONE},
5536 "{016fe2ec-b2c8-45f8-b23b-39e53a753972}",
5538 0x0000, 0x00000000, 0, 0, 0,
5545 "{00000000-0000-0000-0000-000000000000}",
5547 0x0000, 0x00000000, 0, 0, 2,
5552 0x40000000,
"f1", 0, VAR_PERINSTANCE,
5555 {
VT_INT, -1, PARAMFLAG_NONE},
5558 0x40000001,
"f2", 0, VAR_PERINSTANCE,
5561 {
VT_PTR, -1, PARAMFLAG_NONE},
5567 "{016fe2ec-b2c8-45f8-b23b-39e53a753973}",
5569 0x0000, 0x00000000, 0, 0, 2,
5574 0x40000000,
"ff1", 0, VAR_PERINSTANCE,
5577 {
VT_INT, -1, PARAMFLAG_NONE},
5580 0x40000001,
"ff2", 0, VAR_PERINSTANCE,
5583 {
VT_PTR, -1, PARAMFLAG_NONE},
5589 "{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac00a}",
5591 0x0000, 0x00000000, 13, 6, 0,
5595 0x60020000, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
5610 0x60020001, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
5625 0x60020002, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
5640 0x60020003, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
5655 0x60020004, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
5670 0x60020005, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
5689 "{2d4430d5-99ea-4645-85f0-c5814b72804b}",
5691 0x0000, 0x00000000, 7, 7, 2,
5697 {
VT_VOID, -1, PARAMFLAG_NONE},
5710 {
VT_VOID, -1, PARAMFLAG_NONE},
5713 {
VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
5741 {
VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
5745 "test_HRESULT_retval",
5753 {
VT_INT, -1, PARAMFLAG_NONE},
5766 {
VT_INT, -1, PARAMFLAG_NONE},
5769 {
VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
5781 {
VT_R8, -1, PARAMFLAG_NONE},
5785 {
VT_I4, -1, PARAMFLAG_FLCID},
5798 0xa,
"property_int", 0, VAR_DISPATCH,
5801 {
VT_INT, -1, PARAMFLAG_NONE},
5804 0xb,
"property_HRESULT", 0, VAR_DISPATCH,
5813 "{79ca07f9-ac22-44ac-9aaf-811f45412293}",
5815 0x0000, 0x00000000, 7, 14, 0,
5819 0x60000000, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5820 2, 0, 0, 0, FUNCFLAG_FRESTRICTED,
5821 {
VT_VOID, -1, PARAMFLAG_NONE},
5824 {
VT_PTR, -1, PARAMFLAG_FIN},
5825 {
VT_PTR, -1, PARAMFLAG_FOUT},
5836 0x60000001, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5837 0, 0, 1, 0, FUNCFLAG_FRESTRICTED,
5838 {
VT_UI4, -1, PARAMFLAG_NONE},
5849 0x60000002, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5850 0, 0, 2, 0, FUNCFLAG_FRESTRICTED,
5851 {
VT_UI4, -1, PARAMFLAG_NONE},
5862 0x60010000, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5863 1, 0, 3, 0, FUNCFLAG_FRESTRICTED,
5864 {
VT_VOID, -1, PARAMFLAG_NONE},
5867 {
VT_PTR, -1, PARAMFLAG_FOUT},
5877 0x60010001, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5878 3, 0, 4, 0, FUNCFLAG_FRESTRICTED,
5879 {
VT_VOID, -1, PARAMFLAG_NONE},
5883 {
VT_UI4, -1, PARAMFLAG_FIN},
5884 {
VT_PTR, -1, PARAMFLAG_FOUT},
5896 0x60010002, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5897 5, 0, 5, 0, FUNCFLAG_FRESTRICTED,
5898 {
VT_VOID, -1, PARAMFLAG_NONE},
5901 {
VT_PTR, -1, PARAMFLAG_FIN},
5902 {
VT_PTR, -1, PARAMFLAG_FIN},
5904 {
VT_UI4, -1, PARAMFLAG_FIN},
5905 {
VT_PTR, -1, PARAMFLAG_FOUT},
5919 0x60010003, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
5920 8, 0, 6, 0, FUNCFLAG_FRESTRICTED,
5921 {
VT_VOID, -1, PARAMFLAG_NONE},
5924 {
VT_I4, -1, PARAMFLAG_FIN},
5925 {
VT_PTR, -1, PARAMFLAG_FIN},
5926 {
VT_UI4, -1, PARAMFLAG_FIN},
5927 {
VT_UI2, -1, PARAMFLAG_FIN},
5928 {
VT_PTR, -1, PARAMFLAG_FIN},
5929 {
VT_PTR, -1, PARAMFLAG_FOUT},
5930 {
VT_PTR, -1, PARAMFLAG_FOUT},
5931 {
VT_PTR, -1, PARAMFLAG_FOUT},
5950 {
VT_VOID, -1, PARAMFLAG_NONE},
5963 {
VT_R8, -1, PARAMFLAG_NONE},
5976 {
VT_VOID, -1, PARAMFLAG_NONE},
5989 {
VT_R8, -1, PARAMFLAG_NONE},
5995 "test_HRESULT_retval",
6002 {
VT_INT, -1, PARAMFLAG_NONE},
6015 {
VT_R8, -1, PARAMFLAG_NONE},
6028 {
VT_R8, -1, PARAMFLAG_NONE},
6045 "{79ca07f9-ac22-44ac-9aaf-811f45412293}",
6047 0x0000, 0x00000000, 14, 7, 0,
6051 0x1, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
6053 {
VT_VOID, -1, PARAMFLAG_NONE},
6064 0x2, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
6066 {
VT_VOID, -1, PARAMFLAG_NONE},
6069 {
VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
6079 0x3, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
6092 0x4, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
6097 {
VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
6101 "test_HRESULT_retval",
6107 0x5, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
6109 {
VT_INT, -1, PARAMFLAG_NONE},
6120 0x6, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
6122 {
VT_INT, -1, PARAMFLAG_NONE},
6125 {
VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
6135 0x7, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
6141 {
VT_I4, -1, PARAMFLAG_FLCID},
6142 {
VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
6158 "{cdb105e3-24fb-4ae6-b826-801b7b2a0a07}",
6160 0x0000, 0x00000000, 7, 14, 0,
6164 0x60000000, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
6165 2, 0, 0, 0, FUNCFLAG_FRESTRICTED,
6166 {
VT_VOID, -1, PARAMFLAG_NONE},
6169 {
VT_PTR, -1, PARAMFLAG_FIN},
6170 {
VT_PTR, -1, PARAMFLAG_FOUT},
6181 0x60000001, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
6182 0, 0, 1, 0, FUNCFLAG_FRESTRICTED,
6183 {
VT_UI4, -1, PARAMFLAG_NONE},
6194 0x60000002, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
6195 0, 0, 2, 0, FUNCFLAG_FRESTRICTED,
6196 {
VT_UI4, -1, PARAMFLAG_NONE},
6207 0x60010000, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
6208 1, 0, 3, 0, FUNCFLAG_FRESTRICTED,
6209 {
VT_VOID, -1, PARAMFLAG_NONE},
6212 {
VT_PTR, -1, PARAMFLAG_FOUT},
6222 0x60010001, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
6223 3, 0, 4, 0, FUNCFLAG_FRESTRICTED,
6224 {
VT_VOID, -1, PARAMFLAG_NONE},
6228 {
VT_UI4, -1, PARAMFLAG_FIN},
6229 {
VT_PTR, -1, PARAMFLAG_FOUT},
6241 0x60010002, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
6242 5, 0, 5, 0, FUNCFLAG_FRESTRICTED,
6243 {
VT_VOID, -1, PARAMFLAG_NONE},
6246 {
VT_PTR, -1, PARAMFLAG_FIN},
6247 {
VT_PTR, -1, PARAMFLAG_FIN},
6249 {
VT_UI4, -1, PARAMFLAG_FIN},
6250 {
VT_PTR, -1, PARAMFLAG_FOUT},
6264 0x60010003, FUNC_DISPATCH, INVOKE_FUNC,
CC_STDCALL,
6265 8, 0, 6, 0, FUNCFLAG_FRESTRICTED,
6266 {
VT_VOID, -1, PARAMFLAG_NONE},
6269 {
VT_I4, -1, PARAMFLAG_FIN},
6270 {
VT_PTR, -1, PARAMFLAG_FIN},
6271 {
VT_UI4, -1, PARAMFLAG_FIN},
6272 {
VT_UI2, -1, PARAMFLAG_FIN},
6273 {
VT_PTR, -1, PARAMFLAG_FIN},
6274 {
VT_PTR, -1, PARAMFLAG_FOUT},
6275 {
VT_PTR, -1, PARAMFLAG_FOUT},
6276 {
VT_PTR, -1, PARAMFLAG_FOUT},
6295 {
VT_VOID, -1, PARAMFLAG_NONE},
6308 {
VT_R8, -1, PARAMFLAG_NONE},
6321 {
VT_VOID, -1, PARAMFLAG_NONE},
6334 {
VT_R8, -1, PARAMFLAG_NONE},
6340 "test_HRESULT_retval",
6347 {
VT_INT, -1, PARAMFLAG_NONE},
6360 {
VT_R8, -1, PARAMFLAG_NONE},
6373 {
VT_R8, -1, PARAMFLAG_NONE},
6389 "custdata_interface",
6390 "{786ee4ff-c5dd-4bf4-9578-0d22fb5369cc}",
6392 0x0000, 0x00000000, 8, 1, 0,
6394 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetCustData interface" } } },
6398 0x60020000, FUNC_PUREVIRTUAL, INVOKE_FUNC,
CC_STDCALL,
6402 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetFuncCustData custdata_interface::test_method" } } },
6405 {
VT_INT, -1, PARAMFLAG_FIN, 1, {
6406 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetParamCustData custdata_interface::test_method(x)" } } },
6421 "{6ca99f5e-c86a-42ad-a5ee-5bd4c8e5553c}",
6423 0x0000, 0x00000000, 0, 0, 2,
6425 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetCustData enum" } } },
6430 0x40000000,
"One", 0, VAR_CONST,
6431 { .varValue = {
VT_I4, { .value_int = 0 } } },
6433 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetVarCustData enum" } } },
6435 {
VT_INT, -1, PARAMFLAG_NONE},
6438 0x40000001,
"Two", 0, VAR_CONST,
6439 { .varValue = {
VT_I4, { .value_int = 1 } } },
6441 {
VT_INT, -1, PARAMFLAG_NONE},
6447 "{62fabe17-f733-4b09-b859-3f455dcda450}",
6449 0x0000, 0x00000000, 0, 0, 1,
6451 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetCustData struct" } } },
6456 0x40000000,
"test_field", 0, VAR_PERINSTANCE,
6459 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetVarCustData struct" } } },
6461 {
VT_INT, -1, PARAMFLAG_NONE},
6467 "{00000000-0000-0000-0000-000000000000}",
6469 0x0000, 0x00000000, 0, 0, 1,
6471 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetCustData union" } } },
6476 0x40000000,
"test_field", 0, VAR_PERINSTANCE,
6479 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetVarCustData union" } } },
6481 {
VT_INT, -1, PARAMFLAG_NONE},
6487 "{d58744d6-63f9-467c-87e5-c95158098b18}",
6489 0x0000, 0x00000000, 0, 0, 0,
6491 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetCustData typedef" } } },
6497 "custdata_dispatch",
6498 "{bffc216e-2159-465a-80df-b85fd4f4f122}",
6500 0x0000, 0x00000000, 7, 1, 1,
6502 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetCustData dispinterface" } } },
6508 {
VT_VOID, -1, PARAMFLAG_NONE},
6510 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetFuncCustData dispinterface method" } } },
6513 {
VT_INT, -1, PARAMFLAG_FIN, 1, {
6514 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetParamCustData test_dispatch::test_method(x)" } } },
6527 0x0,
"test_property", 0, VAR_DISPATCH,
6530 {
"{c8768723-e6d2-4442-b039-92e9c82429c4}", {
VT_BSTR, { .value_str =
"ITypeInfo2::GetVarCustData dispinterface property" } } },
6532 {
VT_INT, -1, PARAMFLAG_NONE},
6538#define check_variant_info(value, expected) { \
6539 expect_int(V_VT(value), (expected)->vt); \
6540 switch(V_VT(value)) { \
6541 case VT_I1: expect_int(V_I1(value), (expected)->value_int); break; \
6542 case VT_I2: expect_int(V_I2(value), (expected)->value_int); break; \
6543 case VT_I4: expect_int(V_I4(value), (expected)->value_int); break; \
6544 case VT_I8: expect_int(V_I8(value), (expected)->value_int); break; \
6545 case VT_BOOL: expect_int(V_BOOL(value), (expected)->value_int); break; \
6546 case VT_INT: expect_int(V_INT(value), (expected)->value_int); break; \
6547 case VT_UI1: expect_int(V_UI1(value), (expected)->value_uint); break; \
6548 case VT_UI2: expect_int(V_UI2(value), (expected)->value_uint); break; \
6549 case VT_UI4: expect_int(V_UI4(value), (expected)->value_uint); break; \
6550 case VT_UI8: expect_int(V_UI8(value), (expected)->value_uint); break; \
6551 case VT_UINT: expect_int(V_UINT(value), (expected)->value_uint); break; \
6552 case VT_BSTR: expect_wstr_acpval(V_BSTR(value), (expected)->value_str); break; \
6553 default: skip("check_variant_info: comparing value not implemented for VARTYPE %d\n",V_VT(value)); \
6556#define check_type(elem, info) { \
6557 expect_int((elem)->tdesc.vt, (info)->vt); \
6558 expect_hex((elem)->paramdesc.wParamFlags, (info)->wParamFlags); \
6572 int iface = 0,
func,
var, cust;
6573 HREFTYPE hRefType = 0;
6584 skip(
"ignoring VARDESC::oInst, (libattr->syskind expected %d got %d)\n",
info_syskind, libattr->syskind);
6610 expect_hex(typeattr->wTypeFlags, ti->wTypeFlags);
6611 expect_int(typeattr->cbAlignment, ti->cbAlignment);
6612 expect_int(typeattr->cbSizeInstance, ti->cbSizeInstance);
6615 expect_int(typeattr->cbSizeVft, ti->cbSizeVft *
sizeof(
void*));
6620 if (ti->uuid && *ti->uuid)
6631 hr = ITypeLib_GetTypeInfoOfGuid(
typelib, &
guid, &typeinfo2);
6633 if (
hr ==
S_OK) ITypeInfo_Release(typeinfo2);
6638 hr = ITypeInfo_QueryInterface(
typeinfo, &IID_ITypeInfo2, (
void**)&typeinfo2);
6639 ok(
hr ==
S_OK,
"Could not get ITypeInfo2: %08lx\n",
hr);
6641 memset(&cust_data, 0,
sizeof(cust_data));
6642 ole_check(ITypeInfo2_GetAllCustData(typeinfo2,&cust_data));
6643 expect_int(cust_data.cCustData, ti->cCustData);
6645 for (cust = 0; cust < ti->cCustData; cust++)
6650 hr = ITypeInfo2_GetCustData(typeinfo2,&
guid,&
v);
6651 ok(
hr ==
S_OK,
"GetCustDatafailed: %08lx\n",
hr);
6676 memset(&cust_data, 0,
sizeof(cust_data));
6677 ole_check(ITypeInfo2_GetAllFuncCustData(typeinfo2,
func,&cust_data));
6680 for (cust = 0; cust < fn_info->
cCustData; cust++)
6685 hr = ITypeInfo2_GetFuncCustData(typeinfo2,
func,&
guid,&
v);
6686 ok(
hr ==
S_OK,
"GetCustDatafailed: %08lx\n",
hr);
6692 for (
i = 0;
i < cNames;
i++)
6700 for (
i = 0 ;
i <
desc->cParams;
i++)
6704 memset(&cust_data, 0,
sizeof(cust_data));
6705 ole_check(ITypeInfo2_GetAllParamCustData(typeinfo2,
func,
i,&cust_data));
6713 hr = ITypeInfo2_GetParamCustData(typeinfo2,
func,
i,&
guid,&
v);
6714 ok(
hr ==
S_OK,
"GetParamCustDatafailed: %08lx\n",
hr);
6727 ok(var_attr->typekind == fn_info->
params[
i].
type,
"expected %#x, got %#x\n", fn_info->
params[
i].
type, var_attr->typekind);
6729 ITypeInfo_ReleaseTypeAttr(
param, var_attr);
6730 ITypeInfo_Release(
param);
6737 ok(
hr ==
S_OK,
"GetFuncCustData failed: %08lx\n",
hr);
6742 hr = ITypeInfo2_GetFuncCustData(typeinfo2,
func, &IID_IBaseIface, &
v);
6743 ok(
hr ==
S_OK,
"GetFuncCustData failed: %08lx\n",
hr);
6747 memset(&cust_data, 0,
sizeof(cust_data));
6752 for (
var = 0;
var < typeattr->cVars;
var++)
6772 if (
desc->varkind == VAR_PERINSTANCE) {
6778 }
else if(
desc->varkind == VAR_CONST) {
6783 memset(&cust_data, 0,
sizeof(cust_data));
6784 ole_check(ITypeInfo2_GetAllVarCustData(typeinfo2,
var,&cust_data));
6792 hr = ITypeInfo2_GetVarCustData(typeinfo2,
var,&
guid,&
v);
6793 ok(
hr ==
S_OK,
"GetVarCustData failed: %08lx\n",
hr);
6804 if ((typeattr->typekind ==
TKIND_DISPATCH) && (typeattr->wTypeFlags & TYPEFLAG_FDUAL) &&
6815 ITypeInfo_ReleaseTypeAttr(
typeinfo, typeattr);
6817 ITypeInfo2_Release(typeinfo2);
6822 ITypeLib_ReleaseTLibAttr(
typelib, libattr);
6835 DWORD msft_header[8];
6846 hr = ICreateTypeLib2_QueryInterface(tl, &IID_ITypeLib, (
void**)&
typelib);
6851 ok(
attr->wLibFlags == 0,
"flags 0x%x\n",
attr->wLibFlags);
6854 hr = ICreateTypeLib2_SetLcid(tl,
lcid);
6857 hr = ICreateTypeLib2_SetVersion(tl, 3, 4);
6860 hr = ICreateTypeLib2_SaveAllChanges(tl);
6865 ok(
attr->wLibFlags == 0,
"flags 0x%x\n",
attr->wLibFlags);
6869 ICreateTypeLib2_Release(tl);
6875 ok(
read ==
sizeof(msft_header),
"read %ld\n",
read);
6878 ok(msft_header[0] == 0x5446534d,
"got %08lx\n", msft_header[0]);
6879 ok(msft_header[1] == 0x00010002,
"got %08lx\n", msft_header[1]);
6880 ok(msft_header[2] == 0xffffffff,
"got %08lx\n", msft_header[2]);
6881 ok(msft_header[3] == (
lcid ?
lcid : 0x409),
"got %08lx (lcid %08lx)\n", msft_header[3],
lcid);
6882 ok(msft_header[4] ==
lcid,
"got %08lx (lcid %08lx)\n", msft_header[4],
lcid);
6883 ok(msft_header[6] == 0x00040003,
"got %08lx\n", msft_header[6]);
6884 ok(msft_header[7] == 0,
"got %08lx\n", msft_header[7]);
6936 {
TKIND_INTERFACE, TYPEFLAG_FDISPATCHABLE | TYPEFLAG_FOLEAUTOMATION },
6950 if (!system_registration && (!pRegisterTypeLibForUser || !pUnRegisterTypeLibForUser))
6952 win_skip(
"User typelib registration functions are not available\n");
6957 if (pIsWow64Process)
6965 if (system_registration)
6971 win_skip(
"Insufficient privileges to register typelib in the registry\n");
6993 ok(
attr->typekind == attrs[
i].kind,
"%d: got kind %d\n",
i,
attr->typekind);
6994 ok(
attr->wTypeFlags == attrs[
i].flags,
"%d: got flags %04x\n",
i,
attr->wTypeFlags);
7000 TYPEATTR *dual_attr;
7002 hr = ITypeInfo_GetRefTypeOfImplType(
typeinfo, -1, &reftype);
7005 hr = ITypeInfo_GetRefTypeInfo(
typeinfo, reftype, &dual_info);
7008 hr = ITypeInfo_GetTypeAttr(dual_info, &dual_attr);
7011 ok(dual_attr->typekind ==
TKIND_INTERFACE,
"%d: got kind %d\n",
i, dual_attr->typekind);
7012 ok(dual_attr->wTypeFlags == (attrs[
i].flags | TYPEFLAG_FOLEAUTOMATION),
7013 "%d: got flags %04x\n",
i, dual_attr->wTypeFlags);
7015 ITypeInfo_ReleaseTypeAttr(dual_info, dual_attr);
7016 ITypeInfo_Release(dual_info);
7033 ok(
ret == expect_ret,
"%d: got %ld\n",
i,
ret);
7038 ok(!
ret,
"Failed to get proxy GUID, error %lu.\n",
ret);
7043 "Got unexpected proxy CLSID %s.\n",
uuid);
7048 "Got unexpected proxy CLSID %s.\n",
uuid);
7059 ok(
ret == expect_ret,
"%d: got %ld\n",
i,
ret);
7067 if (system_registration)
7112 ELEMDESC elemdesc[5], elemdesc2[5];
7113 FUNCDESC funcdesc, funcdesc2;
7122 static const WCHAR wszStdOle2[] = {
's',
't',
'd',
'o',
'l',
'e',
'2',
'.',
't',
'l',
'b',0 };
7124 static OLECHAR typelibW[] = {
'W',
'i',
'n',
'e',
'T',
'e',
's',
't',
'T',
'y',
'p',
'e',
'L',
'i',
'b',0};
7125 static OLECHAR helpfileW[] = {
'C',
':',
'\\',
'b',
'o',
'g',
'u',
's',
'.',
'h',
'l',
'p',0 };
7126 static OLECHAR dllfileW[] = {
'C',
':',
'\\',
'b',
'o',
'g',
'u',
's',
'.',
'd',
'l',
'l',0 };
7127 static OLECHAR interface1W[] = {
'I',
'T',
'e',
's',
't',
'W',
'i',
'n',
'e',
'6',
'4', 0};
7128 static OLECHAR coclassW[] = {
'W',
'i',
'n',
'e',
'T',
'e',
's',
't',
'C',
'o',
'c',
'l',
'a',
's',
's',0 };
7129 static OLECHAR func1W[] = {
'f',
'u',
'n',
'c',
'1',0 };
7130 static OLECHAR func2W[] = {
'f',
'u',
'n',
'c',
'2',0 };
7131 static OLECHAR param1W[] = {
'p',
'a',
'r',
'a',
'm',
'1',0 };
7132 static OLECHAR param2W[] = {
'p',
'a',
'r',
'a',
'm',
'2',0 };
7133 static OLECHAR *names1[] = { func1W, param1W, param2W };
7134 static OLECHAR *names2[] = { func2W, param1W };
7135 static const GUID tlcustguid = { 0x512d2fec,0xcaf6,0x4c33,{0xbc,0x38,0x84,0x2f,0x2e,0x37,0x0d,0x7b} };
7136 static const GUID coclassguid = { 0x317cd4dd,0x0ce0,0x4525,{0x8d,0x33,0x68,0x14,0x4c,0x53,0x60,0xe9} };
7137 static const GUID interfaceguid = { 0x35cc5cea,0x11cc,0x4bca,{0x89,0x8c,0xf8,0x92,0x8e,0xb8,0xda,0x24} };
7141 if (pIsWow64Process)
7155 hr = ICreateTypeLib2_SetName(createtl, typelibW);
7158 hr = ICreateTypeLib2_SetHelpFileName(createtl, helpfileW);
7161 hr = ICreateTypeLib2_SetHelpStringDll(createtl, dllfileW);
7164 hr = ICreateTypeLib2_SetGuid(createtl, &tlcustguid);
7167 hr = ICreateTypeLib2_SetVersion(createtl, 1, 0);
7170 hr = ICreateTypeLib2_CreateTypeInfo(createtl, coclassW,
TKIND_COCLASS, &createti_co);
7173 hr = ICreateTypeLib2_CreateTypeInfo(createtl, interface1W,
TKIND_INTERFACE, &createti);
7176 hr = ICreateTypeInfo_LayOut(createti);
7179 hr = ICreateTypeInfo_SetGuid(createti, &interfaceguid);
7182 hr = ICreateTypeInfo_SetVersion(createti, 1, 0);
7185 hr = ICreateTypeInfo_AddRefTypeInfo(createti,
unknown, &hreftype);
7188 hr = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
7191 elemdesc[0].tdesc.vt =
VT_UINT;
7192 elemdesc[0].idldesc.dwReserved = 0;
7193 elemdesc[0].idldesc.wIDLFlags = IDLFLAG_FIN;
7196 elemdesc[1].idldesc.dwReserved = 0;
7197 elemdesc[1].idldesc.wIDLFlags = IDLFLAG_FIN;
7199 memset(&funcdesc, 0,
sizeof(FUNCDESC));
7200 funcdesc.funckind = FUNC_PUREVIRTUAL;
7201 funcdesc.invkind = INVOKE_FUNC;
7203 funcdesc.cParams = 2;
7204 funcdesc.memid = 0x1;
7206 funcdesc.lprgelemdescParam = elemdesc;
7208 hr = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
7211 elemdesc2[0].tdesc.vt =
VT_UINT;
7212 elemdesc2[0].idldesc.dwReserved = 0;
7213 elemdesc2[0].idldesc.wIDLFlags = IDLFLAG_FIN | IDLFLAG_FOUT;
7215 memset(&funcdesc2, 0,
sizeof(FUNCDESC));
7216 funcdesc2.funckind = FUNC_PUREVIRTUAL;
7217 funcdesc2.invkind = INVOKE_FUNC;
7219 funcdesc2.cParams = 1;
7220 funcdesc2.memid = 0x2;
7221 funcdesc2.elemdescFunc.tdesc.vt =
VT_HRESULT;
7222 funcdesc2.lprgelemdescParam = elemdesc2;
7224 hr = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc2);
7227 hr = ICreateTypeInfo_SetFuncHelpContext(createti, 0, 0xabcdefab);
7230 hr = ICreateTypeInfo_SetFuncHelpContext(createti, 1, 0xabcdefab);
7233 hr = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, names1, 3);
7236 hr = ICreateTypeInfo_SetFuncAndParamNames(createti, 1, names2, 2);
7239 hr = ICreateTypeInfo_SetTypeFlags(createti, TYPEFLAG_FOLEAUTOMATION | TYPEFLAG_FNONEXTENSIBLE | TYPEFLAG_FDUAL);
7242 hr = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&tinfo);
7245 hr = ITypeInfo_GetRefTypeOfImplType(tinfo, 0, &hreftype);
7248 hr = ICreateTypeInfo_SetGuid(createti_co, &coclassguid);
7251 hr = ICreateTypeInfo_AddRefTypeInfo(createti_co, tinfo, &hreftype);
7254 hr = ICreateTypeInfo_AddImplType(createti_co, 0, hreftype);
7257 hr = ICreateTypeInfo_SetImplTypeFlags(createti_co, 0, IMPLTYPEFLAG_FDEFAULT);
7260 hr = ICreateTypeInfo_Release(createti_co);
7263 ICreateTypeInfo_Release(createti);
7265 hr = ICreateTypeLib2_SaveAllChanges(createtl);
7268 ICreateTypeLib2_Release(createtl);
7284 win_skip(
"Insufficient privileges to register typelib in the registry\n");
7299 size =
sizeof(tlb_name);
7311 size =
sizeof(tlb_name);
7320 "Got unexpected TypLib description: %ls\n", tlb_name);
7331 static const WCHAR kernel32_dllW[] = {
'k',
'e',
'r',
'n',
'e',
'l',
'3',
'2',
'.',
'd',
'l',
'l',0};
7339 tl = (
void *)0xdeadbeef;
7342 ok(tl == (
void *)0xdeadbeef,
"Got %p.\n", tl);
7347 tl = (
void *)0xdeadbeef;
7350 ok(tl == (
void *)0xdeadbeef,
"Got %p.\n", tl);
7362 VARDESC
desc, *pdesc;
7376 hr = ICreateTypeInfo_SetVarHelpContext(cti, 0, 0);
7382 desc.varkind = VAR_CONST;
7386 desc.lpvarValue = &
v;
7387 hr = ICreateTypeInfo_AddVarDesc(cti, 0, &
desc);
7390 hr = ICreateTypeInfo_SetVarHelpContext(cti, 0, 0);
7394 hr = ICreateTypeInfo_SetVarHelpContext(cti, 0, 1);
7398 hr = ICreateTypeInfo_SetVarHelpContext(cti, 1, 0);
7401 ICreateTypeInfo_Release(cti);
7403 hr = ICreateTypeLib2_SaveAllChanges(ctl);
7406 ICreateTypeLib2_Release(ctl);
7411 hr = ITypeLib_GetTypeInfo(tl, 0, &ti);
7414 hr = ITypeInfo_GetVarDesc(ti, 0, &pdesc);
7416 ok(pdesc->memid == 0x40000000,
"got wrong memid: %lx\n", pdesc->memid);
7417 ok(pdesc->elemdescVar.tdesc.vt ==
VT_INT,
"got wrong vardesc type: %u\n", pdesc->elemdescVar.tdesc.vt);
7418 ok(pdesc->varkind == VAR_CONST,
"got wrong varkind: %u\n", pdesc->varkind);
7419 ok(
V_VT(pdesc->lpvarValue) ==
VT_INT,
"got wrong value type: %u\n",
V_VT(pdesc->lpvarValue));
7420 ok(
V_INT(pdesc->lpvarValue) == 1,
"got wrong value: 0x%x\n",
V_INT(pdesc->lpvarValue));
7424 ok(
ctx == 1,
"got wrong help context: 0x%lx\n",
ctx);
7426 ITypeInfo_ReleaseVarDesc(ti, pdesc);
7427 ITypeInfo_Release(ti);
7428 ITypeLib_Release(tl);
7436 static OLECHAR name2W[] = {
'n',
'a',
'm',
'e',
'2',0};
7437 static OLECHAR prop[] = {
'p',
'r',
'o',
'p',0};
7438 static OLECHAR *propW[] = {prop};
7463 memset(&funcdesc, 0,
sizeof(FUNCDESC));
7464 funcdesc.funckind = FUNC_DISPATCH;
7466 funcdesc.elemdescFunc.tdesc.vt =
VT_VOID;
7467 funcdesc.wFuncFlags = FUNCFLAG_FBINDABLE;
7470 memset(&edesc, 0,
sizeof(edesc));
7472 edesc.idldesc.dwReserved = 0;
7473 edesc.idldesc.wIDLFlags = IDLFLAG_FIN;
7475 funcdesc.lprgelemdescParam = &edesc;
7476 funcdesc.invkind = INVOKE_PROPERTYPUT;
7477 funcdesc.cParams = 1;
7479 hr = ICreateTypeInfo_AddFuncDesc(cti, 0, &funcdesc);
7483 hr = ICreateTypeInfo_SetFuncAndParamNames(cti, 0, propW, 1);
7487 funcdesc.invkind = INVOKE_PROPERTYPUTREF;
7488 hr = ICreateTypeInfo_AddFuncDesc(cti, 1, &funcdesc);
7492 hr = ICreateTypeInfo_SetFuncAndParamNames(cti, 1, propW, 1);
7495 funcdesc.invkind = INVOKE_PROPERTYGET;
7496 funcdesc.cParams = 0;
7497 hr = ICreateTypeInfo_AddFuncDesc(cti, 2, &funcdesc);
7501 hr = ICreateTypeInfo_SetFuncAndParamNames(cti, 2, propW, 1);
7504 hr = ICreateTypeInfo_AddFuncDesc(cti, 3, &funcdesc);
7508 hr = ICreateTypeInfo_SetFuncAndParamNames(cti, 3, propW, 1);
7512 funcdesc.invkind = INVOKE_FUNC;
7513 funcdesc.cParams = 1;
7514 hr = ICreateTypeInfo_AddFuncDesc(cti, 4, &funcdesc);
7517 hr = ICreateTypeInfo_SetFuncAndParamNames(cti, 4, funcW, 2);
7520 ICreateTypeInfo_Release(cti);
7525 funcdesc.funckind = FUNC_PUREVIRTUAL;
7526 funcdesc.invkind = INVOKE_FUNC;
7527 funcdesc.cParams = 0;
7528 funcdesc.lprgelemdescParam =
NULL;
7529 hr = ICreateTypeInfo_AddFuncDesc(cti, 0, &funcdesc);
7532 hr = ICreateTypeInfo_SetFuncAndParamNames(cti, 0, funcW, 1);
7535 ICreateTypeInfo_Release(cti);
7537 hr = ICreateTypeLib2_QueryInterface(ctl, &IID_ITypeLib, (
void**)&tl);
7541 memset(infos, 0,
sizeof(infos));
7542 memids[0] = 0xdeadbeef;
7543 memids[1] = 0xdeadbeef;
7544 memids[2] = 0xdeadbeef;
7545 hr = ITypeLib_FindName(tl,
func, 0, infos, memids, &found);
7547 ok(found == 1,
"got wrong count: %u\n", found);
7548 ok(infos[0] && !infos[1] && !infos[2],
"got wrong typeinfo\n");
7549 ok(memids[0] == 0,
"got wrong memid[0]\n");
7550 ok(memids[1] == 0xdeadbeef && memids[2] == 0xdeadbeef,
"got wrong memids\n");
7551 ITypeInfo_Release(infos[0]);
7554 memset(infos, 0,
sizeof(infos));
7555 memids[0] = 0xdeadbeef;
7556 memids[1] = 0xdeadbeef;
7557 memids[2] = 0xdeadbeef;
7558 hr = ITypeLib_FindName(tl,
func, 0, infos, memids, &found);
7560 ok(found == 2,
"got wrong count: %u\n", found);
7561 ok(infos[0] && infos[1] && infos[0] != infos[1],
"got same typeinfo\n");
7562 ok(memids[0] == 0,
"got wrong memid[0]\n");
7563 ok(memids[1] == 0,
"got wrong memid[1]\n");
7564 ITypeInfo_Release(infos[0]);
7565 ITypeInfo_Release(infos[1]);
7567 ITypeLib_Release(tl);
7568 ICreateTypeLib2_Release(ctl);
7575 static OLECHAR name2W[] = {
'n',
'a',
'm',
'e',
'2',0};
7576 static OLECHAR doc1W[] = {
'd',
'o',
'c',
'1',0};
7577 static OLECHAR doc2W[] = {
'd',
'o',
'c',
'2',0};
7578 static OLECHAR var_nameW[] = {
'v',
'a',
'r',
'n',
'a',
'm',
'e',0};
7586 VARDESC
desc, *pdesc;
7587 FUNCDESC funcdesc, *pfuncdesc;
7600 hr = ICreateTypeInfo_SetVarDocString(cti, 0, doc1W);
7603 hr = ICreateTypeInfo_SetVarDocString(cti, 0,
NULL);
7609 desc.varkind = VAR_CONST;
7613 desc.lpvarValue = &
v;
7614 hr = ICreateTypeInfo_AddVarDesc(cti, 0, &
desc);
7617 hr = ICreateTypeInfo_SetVarName(cti, 0,
NULL);
7620 hr = ICreateTypeInfo_SetVarName(cti, 1, var_nameW);
7623 hr = ICreateTypeInfo_SetVarName(cti, 0, var_nameW);
7626 hr = ICreateTypeInfo_SetVarDocString(cti, 0,
NULL);
7629 hr = ICreateTypeInfo_SetVarDocString(cti, 0, doc1W);
7633 hr = ICreateTypeInfo_SetVarDocString(cti, 0, doc2W);
7637 hr = ICreateTypeInfo_SetVarDocString(cti, 1, doc1W);
7640 ICreateTypeInfo_Release(cti);
7645 hr = ICreateTypeInfo_SetFuncDocString(cti, 0, doc1W);
7648 hr = ICreateTypeInfo_SetFuncDocString(cti, 0,
NULL);
7651 memset(&funcdesc, 0,
sizeof(funcdesc));
7653 funcdesc.funckind = FUNC_PUREVIRTUAL;
7654 funcdesc.invkind = INVOKE_FUNC;
7657 hr = ICreateTypeInfo_AddFuncDesc(cti, 0, &funcdesc);
7660 hr = ICreateTypeInfo_SetFuncDocString(cti, 0, doc1W);
7663 ICreateTypeInfo_Release(cti);
7665 hr = ICreateTypeLib2_SaveAllChanges(ctl);
7668 ICreateTypeLib2_Release(ctl);
7673 hr = ITypeLib_GetTypeInfo(tl, 0, &ti);
7676 hr = ITypeInfo_GetVarDesc(ti, 0, &pdesc);
7678 ok(pdesc->memid == 0x40000000,
"got wrong memid: %lx\n", pdesc->memid);
7679 ok(pdesc->elemdescVar.tdesc.vt ==
VT_INT,
"got wrong vardesc type: %u\n", pdesc->elemdescVar.tdesc.vt);
7680 ok(pdesc->varkind == VAR_CONST,
"got wrong varkind: %u\n", pdesc->varkind);
7681 ok(
V_VT(pdesc->lpvarValue) ==
VT_INT,
"got wrong value type: %u\n",
V_VT(pdesc->lpvarValue));
7682 ok(
V_INT(pdesc->lpvarValue) == 1,
"got wrong value: 0x%x\n",
V_INT(pdesc->lpvarValue));
7684 hr = ITypeInfo_GetDocumentation(ti, pdesc->memid, &namestr, &
docstr,
NULL,
NULL);
7686 ok(
memcmp(namestr, var_nameW,
sizeof(var_nameW)) == 0,
"got wrong name: %s\n",
wine_dbgstr_w(namestr));
7692 ITypeInfo_ReleaseVarDesc(ti, pdesc);
7693 ITypeInfo_Release(ti);
7695 hr = ITypeLib_GetTypeInfo(tl, 1, &ti);
7698 hr = ITypeInfo_GetFuncDesc(ti, 0, &pfuncdesc);
7700 ok(pfuncdesc->memid == 0x60000000,
"got wrong memid: %lx\n", pfuncdesc->memid);
7701 ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL,
"got wrong funckind: %x\n", pfuncdesc->funckind);
7702 ok(pfuncdesc->invkind == INVOKE_FUNC,
"got wrong invkind: %x\n", pfuncdesc->invkind);
7703 ok(pfuncdesc->callconv ==
CC_STDCALL,
"got wrong callconv: %x\n", pfuncdesc->callconv);
7705 hr = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &namestr, &
docstr,
NULL,
NULL);
7712 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
7713 ITypeInfo_Release(ti);
7715 ITypeLib_Release(tl);
7722 static const WCHAR invalidW[] = {
'i',
'n',
'v',
'a',
'l',
'i',
'd',0};
7741 ti = (
void*)0xdeadbeef;
7742 hr = ITypeLib_FindName(tl, buffW, 0, &ti,
NULL, &
c);
7744 ok(
c == 0,
"got %d\n",
c);
7745 ok(ti == (
void*)0xdeadbeef,
"got %p\n", ti);
7748 ti = (
void*)0xdeadbeef;
7749 hr = ITypeLib_FindName(tl, buffW, 0, &ti,
NULL, &
c);
7751 ok(
c == 1,
"got %d\n",
c);
7752 ok(ti == (
void*)0xdeadbeef,
"got %p\n", ti);
7756 ti = (
void*)0xdeadbeef;
7757 hr = ITypeLib_FindName(tl, buffW, 0, &ti, &memid, &
c);
7761 ok(
c == 1,
"got %d\n",
c);
7762 ITypeInfo_Release(ti);
7767 ti = (
void*)0xdeadbeef;
7768 hr = ITypeLib_FindName(tl, buffW, 0, &ti, &memid, &
c);
7773 ok(
c == 1,
"got %d\n",
c);
7776 ITypeInfo_Release(ti);
7781 ti = (
void*)0xdeadbeef;
7782 hr = ITypeLib_FindName(tl, buffW, 0, &ti, &memid, &
c);
7786 ok(
c == 0,
"got %d\n",
c);
7787 ok(ti == (
void*)0xdeadbeef,
"got %p\n", ti);
7789 ITypeLib_Release(tl);
7794 static const WCHAR test[] = {
't',
'e',
's',
't',
'.',
't',
'l',
'b',0};
7795 static OLECHAR testTI[] = {
't',
'e',
's',
't',
'T',
'y',
'p',
'e',
'I',
'n',
'f',
'o',0};
7810 hr = ICreateTypeInfo_QueryInterface(cti, &IID_ITypeInfo2, (
void**)&ti2);
7815 hr = ITypeInfo2_GetContainingTypeLib(ti2, &tl, &
Index);
7817 ok(tl !=
NULL,
"ITypeInfo2_GetContainingTypeLib returned empty TypeLib\n");
7818 ok(
Index == 0,
"ITypeInfo2_GetContainingTypeLib returned Index = %u, expected 0\n",
Index);
7819 if(tl) ITypeLib_Release(tl);
7822 hr = ITypeInfo2_GetContainingTypeLib(ti2, &tl,
NULL);
7824 ok(tl !=
NULL,
"ITypeInfo2_GetContainingTypeLib returned empty TypeLib\n");
7825 if(tl) ITypeLib_Release(tl);
7828 hr = ITypeInfo2_GetContainingTypeLib(ti2,
NULL, &
Index);
7830 ok(
Index == 0,
"ITypeInfo2_GetContainingTypeLib returned Index = %u, expected 0\n",
Index);
7832 hr = ITypeInfo2_GetContainingTypeLib(ti2,
NULL,
NULL);
7835 ITypeInfo2_Release(ti2);
7836 ICreateTypeInfo_Release(cti);
7837 ICreateTypeLib2_Release(ctl2);
7860 actctx.cbSize =
sizeof(ACTCTXW);
7869 ok(
actctx.wProcessorArchitecture == 0,
"actctx.wProcessorArchitecture=%d\n",
actctx.wProcessorArchitecture);
7871 ok(
actctx.lpAssemblyDirectory ==
NULL,
"actctx.lpAssemblyDirectory=%p\n",
actctx.lpAssemblyDirectory);
7872 ok(
actctx.lpResourceName ==
NULL,
"actctx.lpResourceName=%p\n",
actctx.lpResourceName);
7873 ok(
actctx.lpApplicationName ==
NULL,
"actctx.lpApplicationName=%p\n",
7874 actctx.lpApplicationName);
7881"<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">"
7882"<assemblyIdentity version=\"1.2.3.4\" name=\"testdep\" type=\"win32\" processorArchitecture=\"" ARCH "\"/>"
7883"<file name=\"test_actctx_tlb.tlb\">"
7884" <typelib tlbid=\"{d96d8a3e-78b6-4c8d-8f27-059db959be8a}\" version=\"2.7\" helpdir=\"\" resourceid=\"409\""
7885" flags=\"Restricted,cONTROL\""
7888"<file name=\"test_actctx_tlb2.tlb\">"
7889" <typelib tlbid=\"{a2cfdbd3-2bbf-4b1c-a414-5a5904e634c9}\" version=\"2.0\" helpdir=\"\" resourceid=\"409\""
7890" flags=\"RESTRICTED,CONTROL\""
7896"<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">"
7897"<assemblyIdentity version=\"1.2.3.4\" name=\"Wine.Test\" type=\"win32\" />"
7899" <dependentAssembly>"
7900" <assemblyIdentity type=\"win32\" name=\"testdep\" version=\"1.2.3.4\" processorArchitecture=\"" ARCH "\" />"
7901" </dependentAssembly>"
7976 if (
hr ==
S_OK) ITypeLib_Release(tl);
7984 if (
hr ==
S_OK) ITypeLib_Release(tl);
7988 if (
hr ==
S_OK) ITypeLib_Release(tl);
7992 if (
hr ==
S_OK) ITypeLib_Release(tl);
7996 if (
hr ==
S_OK) ITypeLib_Release(tl);
8007 win_skip(
"Skipping parts that crash on Windows Server 2008 - Build 6003 SP2 - AMD64\n");
8012 hr = ITypeLib_GetLibAttr(tl, &
attr);
8015 ok(
attr->lcid == 0,
"got %lx\n",
attr->lcid);
8016 ok(
attr->wMajorVerNum == 2,
"got %d\n",
attr->wMajorVerNum);
8017 ok(
attr->wMinorVerNum == 5,
"got %d\n",
attr->wMinorVerNum);
8020 ITypeLib_ReleaseTLibAttr(tl,
attr);
8021 ITypeLib_Release(tl);
8035 hr = ITypeLib_GetLibAttr(tl, &
attr);
8038 ok(
attr->lcid == 0,
"got %lx\n",
attr->lcid);
8039 ok(
attr->wMajorVerNum == 2,
"got %d\n",
attr->wMajorVerNum);
8040 ok(
attr->wMinorVerNum == 5,
"got %d\n",
attr->wMinorVerNum);
8043 ITypeLib_ReleaseTLibAttr(tl,
attr);
8044 ITypeLib_Release(tl);
8093 {
VT_CARRAY, 16 , 4, 4,
AUX_ADESC, { { 0 } }, { { { 0 },
VT_INT }, 1, { { 4, 0 } } } },
8114 static const WCHAR name_fmtW[] = {
'a',
'l',
'i',
'a',
's',
'%',
'0',
'2',
'u',0};
8119 hr = ITypeLib_QueryInterface(tl, &IID_ICreateTypeLib2, (
void**)&ctl);
8125 tdesc.vt = TDATest->
vt;
8127 tdesc.lptdesc = &TDATest->
tdesc;
8129 tdesc.lpadesc = &TDATest->
adesc;
8131 tdesc.hreftype = hreftype;
8133 hr = ICreateTypeInfo_SetTypeDescAlias(cti, &tdesc);
8134 ok(
hr ==
S_OK,
"for VT %u, got %08lx\n", TDATest->
vt,
hr);
8136 hr = ICreateTypeInfo_QueryInterface(cti, &IID_ITypeInfo, (
void**)&ti);
8139 ICreateTypeInfo_Release(cti);
8140 ICreateTypeLib2_Release(ctl);
8145 hr = ITypeLib_FindName(tl,
nameW, 0, &ti, &memid, &found);
8146 ok(
hr ==
S_OK,
"for VT %u, got %08lx\n", TDATest->
vt,
hr);
8149 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8153 size = href_cbSizeInstance;
8161 size =
sizeof(
void*);
8177 ok(typeattr->cbSizeInstance ==
size,
"got wrong size for VT %u: 0x%lx\n", TDATest->
vt, typeattr->cbSizeInstance);
8178 ok(typeattr->cbAlignment ==
alignment,
"got wrong alignment for VT %u: 0x%x\n", TDATest->
vt, typeattr->cbAlignment);
8179 ok(typeattr->tdescAlias.vt == TDATest->
vt,
"got wrong VT for VT %u: 0x%x\n", TDATest->
vt, typeattr->tdescAlias.vt);
8181 switch(TDATest->
aux){
8183 ok(typeattr->tdescAlias.hreftype == hreftype,
"got wrong hreftype for VT %u: 0x%lx\n", TDATest->
vt, typeattr->tdescAlias.hreftype);
8186 ok(typeattr->tdescAlias.lptdesc->vt == TDATest->
tdesc.vt,
"got wrong typedesc VT for VT %u: 0x%x\n", TDATest->
vt, typeattr->tdescAlias.lptdesc->vt);
8189 ok(typeattr->tdescAlias.lpadesc->tdescElem.vt == TDATest->
adesc.tdescElem.vt,
"got wrong arraydesc element VT for VT %u: 0x%x\n", TDATest->
vt, typeattr->tdescAlias.lpadesc->tdescElem.vt);
8190 ok(typeattr->tdescAlias.lpadesc->cDims == TDATest->
adesc.cDims,
"got wrong arraydesc dimension count for VT %u: 0x%x\n", TDATest->
vt, typeattr->tdescAlias.lpadesc->cDims);
8191 ok(typeattr->tdescAlias.lpadesc->rgbounds[0].cElements == TDATest->
adesc.rgbounds[0].cElements,
"got wrong arraydesc element count for VT %u: 0x%lx\n", TDATest->
vt, typeattr->tdescAlias.lpadesc->rgbounds[0].cElements);
8192 ok(typeattr->tdescAlias.lpadesc->rgbounds[0].lLbound == TDATest->
adesc.rgbounds[0].lLbound,
"got wrong arraydesc lower bound for VT %u: 0x%lx\n", TDATest->
vt, typeattr->tdescAlias.lpadesc->rgbounds[0].lLbound);
8196 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8197 ITypeInfo_Release(ti);
8210 ULONG href_cbSizeInstance,
i;
8214 static OLECHAR interfaceW[] = {
'i',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',0};
8238 hr = ICreateTypeInfo_QueryInterface(cti, &IID_ITypeInfo, (
void**)&ti);
8241 hr = ICreateTypeInfo_AddRefTypeInfo(cti, ti, &hreftype);
8244 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8247 href_cbSizeInstance = typeattr->cbSizeInstance;
8248 href_cbAlignment = typeattr->cbAlignment;
8250 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8252 ITypeInfo_Release(ti);
8253 ICreateTypeInfo_Release(cti);
8255 hr = ICreateTypeLib2_QueryInterface(ctl, &IID_ITypeLib, (
void**)&tl);
8261 hr = ICreateTypeLib2_SaveAllChanges(ctl);
8264 ITypeLib_Release(tl);
8265 ok(0 == ICreateTypeLib2_Release(ctl),
"typelib should have been released\n");
8270 hr = ITypeLib_GetTypeInfo(tl, 0, &ti);
8273 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8276 href_cbSizeInstance = typeattr->cbSizeInstance;
8277 href_cbAlignment = typeattr->cbAlignment;
8279 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8280 ITypeInfo_Release(ti);
8285 ok(0 == ITypeLib_Release(tl),
"typelib should have been released\n");
8301 ref1 = ITypeLib_AddRef(tl);
8302 ITypeLib_Release(tl);
8304 hr = ITypeLib_GetLibAttr(tl, &
attr);
8307 ref2 = ITypeLib_AddRef(tl);
8308 ITypeLib_Release(tl);
8309 ok(ref2 == ref1,
"got %ld, %ld\n", ref2, ref1);
8311 ITypeLib_ReleaseTLibAttr(tl,
attr);
8312 ITypeLib_Release(tl);
8353 static const GUID libguid = {0x3b9ff02e,0x9675,0x4861,{0xb7,0x81,0xce,0xae,0xa4,0x78,0x2a,0xcc}};
8354 static const GUID interfaceguid = {0x3b9ff02f,0x9675,0x4861,{0xb7,0x81,0xce,0xae,0xa4,0x78,0x2a,0xcc}};
8355 static const GUID coclassguid = {0x3b9ff030,0x9675,0x4861,{0xb7,0x81,0xce,0xae,0xa4,0x78,0x2a,0xcc}};
8356 static OLECHAR interfaceW[] = {
'i',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',0};
8357 static OLECHAR classW[] = {
'c',
'l',
'a',
's',
's',0};
8358 static DWORD sam_list32[] = { 0, ~0 };
8361 if (pIsWow64Process)
8364 sam_list = sam_list64;
8366 sam_list = sam_list32;
8382 hr = ICreateTypeLib2_SetGuid(ctl, &libguid);
8391 hr = ICreateTypeInfo_SetGuid(cti, &interfaceguid);
8394 hr = ICreateTypeInfo_SetTypeFlags(cti, TYPEFLAG_FOLEAUTOMATION);
8397 hr = ICreateTypeInfo_AddRefTypeInfo(cti, unk, &href);
8400 hr = ICreateTypeInfo_AddImplType(cti, 0, href);
8403 hr = ICreateTypeInfo_QueryInterface(cti, &IID_ITypeInfo, (
void**)&ti);
8406 ICreateTypeInfo_Release(cti);
8407 ITypeInfo_Release(unk);
8408 ITypeLib_Release(
stdole);
8410 hr = ICreateTypeLib2_CreateTypeInfo(ctl, classW,
TKIND_COCLASS, &cti);
8413 hr = ICreateTypeInfo_SetGuid(cti, &coclassguid);
8416 hr = ICreateTypeInfo_AddRefTypeInfo(cti, ti, &href);
8419 hr = ICreateTypeInfo_AddImplType(cti, 0, href);
8422 ITypeInfo_Release(ti);
8423 ICreateTypeInfo_Release(cti);
8425 hr = ICreateTypeLib2_SaveAllChanges(ctl);
8428 hr = ICreateTypeLib2_QueryInterface(ctl, &IID_ITypeLib, (
void**)&tl);
8431 for (
i = 0; sam_list[
i] != ~0;
i++)
8443 win_skip(
"Insufficient privileges to register typelib in the registry\n");
8446 ok(
hr ==
S_OK,
"got %08lx, side: %04lx\n",
hr, side);
8453 ok(lr ==
ERROR_SUCCESS,
"got wrong return code: %lu, side: %04lx\n", lr, side);
8466 ok(lr ==
ERROR_SUCCESS,
"got wrong return code: %lu, side: %04lx\n", lr, side);
8468 ok(lr ==
ERROR_SUCCESS,
"got wrong return code: %lu, side: %04lx\n", lr, side);
8477 win_skip(
"Registry reflection is enabled on this platform.\n");
8484 ok(lr ==
ERROR_SUCCESS,
"got wrong return code: %lu, side: %04lx\n", lr, side);
8489 ok(
hr ==
S_OK,
"got: %lx, side: %04lx\n",
hr, side);
8492 &IID_IPSFactoryBuffer, (
void **)&
factory);
8493 ok(
hr ==
S_OK,
"got: %lx, side: %04lx\n",
hr, side);
8495 hr = IPSFactoryBuffer_CreateStub(
factory, &interfaceguid, &
uk, &base_stub);
8496 ok(
hr ==
S_OK,
"got: %lx, side: %04lx\n",
hr, side);
8497 IRpcStubBuffer_Release(base_stub);
8499 IPSFactoryBuffer_Release(
factory);
8502 ok(
hr ==
S_OK,
"got: %lx, side: %04lx\n",
hr, side);
8505 ITypeLib_Release(tl);
8506 ok(0 == ICreateTypeLib2_Release(ctl),
"Typelib still has references\n");
8516 const WCHAR *refFilename;
8528 static WCHAR ifacenameW[] = {
'I',
'T',
'e',
's',
't',
'D',
'e',
'p',0};
8530 static const GUID libguid = {0xe0228f26,0x2946,0x478c,{0xb6,0x4a,0x93,0xfe,0xef,0xa5,0x05,0x32}};
8531 static const GUID ifaceguid = {0x394376dd,0x3bb8,0x4804,{0x8c,0xcc,0x95,0x59,0x43,0x40,0x04,0xf3}};
8539 hr = ITypeLib_GetTypeInfoOfGuid(preftLib, &IID_IBaseIface, &preftInfo);
8548 hr = ICreateTypeLib2_SetGuid(pctLib, &libguid);
8554 hr = ICreateTypeLib2_CreateTypeInfo(pctLib, ifacenameW,
TKIND_INTERFACE, &pctInfo);
8557 hr = ICreateTypeInfo_SetGuid(pctInfo, &ifaceguid);
8560 hr = ICreateTypeInfo_SetTypeFlags(pctInfo, TYPEFLAG_FOLEAUTOMATION);
8563 hr = ICreateTypeInfo_AddRefTypeInfo(pctInfo, preftInfo, &refType);
8566 hr = ICreateTypeInfo_AddImplType(pctInfo, 0, refType);
8569 ICreateTypeInfo_Release(pctInfo);
8571 hr = ICreateTypeLib2_SaveAllChanges(pctLib);
8574 ICreateTypeLib2_Release(pctLib);
8576 ITypeInfo_Release(preftInfo);
8577 ITypeLib_Release(preftLib);
8583 hr = ITypeLib_GetTypeInfoOfGuid(ptLib, &ifaceguid, &ptInfo);
8586 hr = ITypeInfo_GetRefTypeOfImplType(ptInfo, 0, &refType);
8589 hr = ITypeInfo_GetRefTypeInfo(ptInfo, refType, &ptInfoExt);
8592 ITypeInfo_Release(ptInfo);
8594 ITypeInfo_Release(ptInfoExt);
8595 ITypeLib_Release(ptLib);
8600 hr = ITypeLib_GetTypeInfo(ptLib, 0, &ptInfo);
8601 ok(
hr ==
S_OK,
"GetTypeInfo failed: %08lx\n",
hr);
8603 hr = ITypeInfo_GetRefTypeOfImplType(ptInfo, 0, &refType);
8604 ok(
hr ==
S_OK,
"GetRefTypeOfImplType failed: %08lx\n",
hr);
8606 hr = ITypeInfo_GetRefTypeInfo(ptInfo, refType, &ptInfoExt);
8613 hr = ITypeInfo_GetRefTypeInfo(ptInfo, refType, &ptInfoExt);
8615 ITypeInfo_Release(ptInfoExt);
8617 ITypeLib_Release(preftLib);
8620 ITypeInfo_Release(ptInfo);
8621 ITypeLib_Release(ptLib);
8629 static OLECHAR interface1W[] =
L"interface1";
8630 HREFTYPE hreftype, hreftype2;
8642 ok(
hr ==
S_OK,
"Failed to load stdole2, hr %#lx.\n",
hr);
8645 ok(
hr ==
S_OK,
"Failed to get IDispatch typeinfo, hr %#lx.\n",
hr);
8650 ok(
hr ==
S_OK,
"Failed to create instance, hr %#lx.\n",
hr);
8652 hr = ICreateTypeLib2_CreateTypeInfo(createtl, interface1W,
TKIND_INTERFACE, &createti);
8653 ok(
hr ==
S_OK,
"Failed to create instance, hr %#lx.\n",
hr);
8654 hr = ICreateTypeInfo_QueryInterface(createti, &IID_ICreateTypeInfo2, (
void **)&createti2);
8655 ok(
hr ==
S_OK,
"Failed to get interface, hr %#lx.\n",
hr);
8656 ICreateTypeInfo_Release(createti);
8658 hr = ICreateTypeInfo2_AddRefTypeInfo(createti2, dispti, &hreftype);
8659 ok(
hr ==
S_OK,
"Failed to add referenced typeinfo, hr %#lx.\n",
hr);
8661 hr = ICreateTypeInfo2_QueryInterface(createti2, &IID_ITypeInfo, (
void **)&ti);
8662 ok(
hr ==
S_OK,
"Failed to get interface, hr %#lx.\n",
hr);
8664 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8665 ok(
hr ==
S_OK,
"Failed to get type attr, hr %#lx.\n",
hr);
8666 ok(!(typeattr->wTypeFlags & TYPEFLAG_FDISPATCHABLE),
"Unexpected type flags %#x.\n", typeattr->wTypeFlags);
8667 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8669 hr = ICreateTypeInfo2_AddImplType(createti2, 0, hreftype);
8670 ok(
hr ==
S_OK,
"Failed to add impl type, hr %#lx.\n",
hr);
8672 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8673 ok(
hr ==
S_OK,
"Failed to get type attr, hr %#lx.\n",
hr);
8674 ok(typeattr->wTypeFlags & TYPEFLAG_FDISPATCHABLE,
"Unexpected type flags %#x.\n", typeattr->wTypeFlags);
8675 ok(typeattr->cImplTypes == 1,
"Unexpected cImplTypes value.\n");
8676 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8679 hr = ICreateTypeInfo2_DeleteImplType(createti2, 0);
8680 ok(
hr ==
S_OK,
"Failed to delete impl type, hr %#lx.\n",
hr);
8682 hr = ICreateTypeInfo2_DeleteImplType(createti2, 0);
8685 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8686 ok(
hr ==
S_OK,
"Failed to get type attr, hr %#lx.\n",
hr);
8687 ok(typeattr->wTypeFlags & TYPEFLAG_FDISPATCHABLE,
"Unexpected type flags %#x.\n", typeattr->wTypeFlags);
8688 ok(!typeattr->cImplTypes,
"Unexpected cImplTypes value.\n");
8689 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8691 hr = ITypeInfo_GetImplTypeFlags(ti, 0, &
flags);
8694 hr = ITypeInfo_GetRefTypeOfImplType(ti, 0, &hreftype2);
8697 hr = ICreateTypeLib2_SaveAllChanges(createtl);
8698 ok(
hr ==
S_OK,
"Failed to save changes, hr %#lx.\n",
hr);
8699 ICreateTypeLib2_Release(createtl);
8700 ITypeInfo_Release(ti);
8701 ICreateTypeInfo2_Release(createti2);
8705 ok(
hr ==
S_OK,
"Failed to load typelib, hr %#lx.\n",
hr);
8707 hr = ITypeLib_GetTypeInfo(tl, 0, &ti);
8708 ok(
hr ==
S_OK,
"Failed to get typeinfo, hr %#lx.\n",
hr);
8709 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8710 ok(
hr ==
S_OK,
"Failed to get type attr, hr %#lx.\n",
hr);
8711 ok(typeattr->wTypeFlags & TYPEFLAG_FDISPATCHABLE,
"Unexpected type flags %#x.\n", typeattr->wTypeFlags);
8712 ok(!typeattr->cImplTypes,
"Unexpected cImplTypes value.\n");
8713 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8714 ITypeInfo_Release(ti);
8716 ITypeLib_Release(tl);
8718 ITypeLib_Release(
stdole);
8719 ITypeInfo_Release(dispti);
8726 OLECHAR interface1W[] =
L"interface1";
8741 ok(
hr ==
S_OK,
"Failed to create instance, hr %#lx.\n",
hr);
8743 hr = ICreateTypeLib2_CreateTypeInfo(createtl, interface1W,
TKIND_INTERFACE, &createti);
8744 ok(
hr ==
S_OK,
"Failed to create instance, hr %#lx.\n",
hr);
8745 hr = ICreateTypeInfo_QueryInterface(createti, &IID_ICreateTypeInfo2, (
void **)&createti2);
8746 ok(
hr ==
S_OK,
"Failed to get interface, hr %#lx.\n",
hr);
8747 ICreateTypeInfo_Release(createti);
8749 hr = ICreateTypeInfo2_QueryInterface(createti2, &IID_ITypeInfo, (
void **)&ti);
8750 ok(
hr ==
S_OK,
"Failed to get typeinfo, hr %#lx.\n",
hr);
8752 memset(&funcdesc, 0,
sizeof(FUNCDESC));
8753 funcdesc.funckind = FUNC_PUREVIRTUAL;
8754 funcdesc.invkind = INVOKE_PROPERTYGET;
8756 funcdesc.elemdescFunc.tdesc.vt =
VT_BSTR;
8757 funcdesc.elemdescFunc.idldesc.wIDLFlags = IDLFLAG_NONE;
8759 hr = ICreateTypeInfo2_AddFuncDesc(createti2, 0, &funcdesc);
8760 ok(
hr ==
S_OK,
"Failed to add a funcdesc, hr %#lx.\n",
hr);
8762 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8763 ok(
hr ==
S_OK,
"Failed to get type attr, hr %#lx.\n",
hr);
8764 ok(typeattr->cFuncs == 1,
"Unexpected cFuncs %u.\n", typeattr->cFuncs);
8765 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8767 hr = ICreateTypeInfo2_DeleteFuncDesc(createti2, 1);
8770 hr = ICreateTypeInfo2_DeleteFuncDesc(createti2, 0);
8773 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8774 ok(
hr ==
S_OK,
"Failed to get type attr, hr %#lx.\n",
hr);
8775 ok(!typeattr->cFuncs,
"Unexpected cFuncs %u.\n", typeattr->cFuncs);
8776 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8778 hr = ICreateTypeLib2_SaveAllChanges(createtl);
8779 ok(
hr ==
S_OK,
"Failed to save changes, hr %#lx.\n",
hr);
8780 ICreateTypeLib2_Release(createtl);
8781 ITypeInfo_Release(ti);
8782 ICreateTypeInfo2_Release(createti2);
8786 ok(
hr ==
S_OK,
"Failed to load typelib, hr %#lx.\n",
hr);
8788 hr = ITypeLib_GetTypeInfo(tl, 0, &ti);
8789 ok(
hr ==
S_OK,
"Failed to get typeinfo, hr %#lx.\n",
hr);
8790 hr = ITypeInfo_GetTypeAttr(ti, &typeattr);
8791 ok(
hr ==
S_OK,
"Failed to get type attr, hr %#lx.\n",
hr);
8792 ok(!typeattr->cFuncs,
"Unexpected cFuncs value.\n");
8793 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
8794 ITypeInfo_Release(ti);
8796 ITypeLib_Release(tl);
8820 trace(
"test_dep(SYS_WIN64) crashes in ReactOS.\n");
8830 trace(
"test_dep(SYS_WIN32) crashes in ReactOS.\n");
COMPILER_DEPENDENT_INT64 INT64
COMPILER_DEPENDENT_UINT64 UINT64
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
static const WCHAR nameW[]
static const TCHAR helpfile[]
void dispatch(HANDLE hStopEvent)
#define RegCloseKey(hKey)
void(* void_func)(int a, int b)
#define ERROR_NOT_ENOUGH_MEMORY
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LSTATUS WINAPI RegQueryValueA(HKEY hkey, LPCSTR name, LPSTR data, LPLONG count)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
HRESULT WINAPI CoGetPSClsid(REFIID riid, CLSID *pclsid)
HRESULT WINAPI IIDFromString(LPCOLESTR str, IID *iid)
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
#define ERROR_CALL_NOT_IMPLEMENTED
struct tagVARIANT VARIANT
#define ReadFile(a, b, c, d, e)
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define CreateFileA(a, b, c, d, e, f, g)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define GetCurrentProcess()
#define HeapFree(x, y, z)
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
#define MultiByteToWideChar
static void cleanup(void)
VOID WINAPI ReleaseActCtx(IN HANDLE hActCtx)
BOOL WINAPI DeactivateActCtx(IN DWORD dwFlags, IN ULONG_PTR ulCookie)
BOOL WINAPI ActivateActCtx(IN HANDLE hActCtx, OUT PULONG_PTR ulCookie)
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
HANDLE WINAPI CreateActCtxW(PCACTCTXW pActCtx)
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
LPVOID WINAPI LockResource(HGLOBAL handle)
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
ULONG WINAPI LHashValOfNameSys(SYSKIND skind, LCID lcid, LPCOLESTR str)
void WINAPI ClearCustData(CUSTDATA *lpCust)
HRESULT WINAPI CreateDispTypeInfo(INTERFACEDATA *pidata, LCID lcid, ITypeInfo **pptinfo)
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
HRESULT WINAPI CreateTypeLib2(SYSKIND syskind, LPCOLESTR szFile, ICreateTypeLib2 **ppctlib)
HRESULT WINAPI RegisterTypeLib(ITypeLib *ptlib, const WCHAR *szFullPath, const WCHAR *szHelpDir)
HRESULT WINAPI DispCallFunc(void *pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals, VARTYPE *prgvt, VARIANTARG **prgpvarg, VARIANT *pvargResult)
HRESULT WINAPI LoadTypeLibEx(LPCOLESTR szFile, REGKIND regkind, ITypeLib **pptLib)
HRESULT WINAPI QueryPathOfRegTypeLib(REFGUID guid, WORD wMaj, WORD wMin, LCID lcid, LPBSTR path)
HRESULT WINAPI UnRegisterTypeLib(REFGUID libid, WORD wVerMajor, WORD wVerMinor, LCID lcid, SYSKIND syskind)
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
UINT WINAPI GetTempFileNameW(IN LPCWSTR lpPathName, IN LPCWSTR lpPrefixString, IN UINT uUnique, OUT LPWSTR lpTempFileName)
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
GLuint GLuint GLsizei count
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
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 todo_wine_if(is_todo)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl void winetest_pop_context(void)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl winetest_push_context(const char *fmt,...) __WINE_PRINTF_ATTR(1
const char * docstr(char *str, int *no_help) const
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static const DWORD ptr_size
static NTSTATUS *static PWSTR CURDIR *static HMODULE hmod
static const WCHAR filenameW[]
static const struct update_accum a1
static const struct update_accum a2
static const struct update_accum a3
static const struct update_accum a4
D3D11_SHADER_VARIABLE_DESC desc
static const WCHAR invalidW[]
static void test_register_typelib(void)
static const GUID LIBID_register_test
static const struct access_res create[16]
static CHAR filenameA[MAX_PATH]
static void test_DeleteImplType(void)
static void write_typelib(int res_no, const WCHAR *filename)
#define expect_wstr_acpval(expr, value)
static ULONG WINAPI invoketest_AddRef(IInvokeTest *iface)
static ULONG WINAPI collection_Release(ICollection *iface)
static void test_invoke_func(ITypeInfo *typeinfo)
static HRESULT WINAPI collection_Invoke(ICollection *iface, DISPID dispid, REFIID riid, LCID lcid, WORD flags, DISPPARAMS *dispparams, VARIANT *res, EXCEPINFO *ei, UINT *argerr)
static int WINAPI int_func(int a0, int a1, int a2, int a3, int a4)
static void test_create_typelib_lcid(LCID lcid)
struct _var_info var_info
static LONG WINAPI invoketest_get_testget2(IInvokeTest *iface, int *value)
static LONGLONG WINAPI longlong_func(LONGLONG a0, CY a1)
static HRESULT WINAPI collection_Item(ICollection *iface, int i, int *p)
static LONG WINAPI invoketest_putref_testprop2(IInvokeTest *iface, IUnknown *i)
static IInvokeTest invoketest
static const char manifest_dep[]
static const BOOL abi_supports_stdcall
static ICollection collection
static int WINAPI inst_func(void *inst, int a)
static void test_LoadTypeLib(void)
static HRESULT WINAPI invoketest_testfunc(IInvokeTest *iface, int i, int *p)
static const WCHAR testW[]
#define ok_ole_success(hr, func)
static HRESULT WINAPI invoketest_GetTypeInfo(IInvokeTest *iface, UINT index, LCID lcid, ITypeInfo **ti)
static void test_QueryPathOfRegTypeLib(DWORD arch)
static const WCHAR wszStdOle2[]
#define expect_hex(expr, value)
struct _variant_info variant_info
static void init_function_pointers(void)
static void test_DeleteFuncDesc(void)
static void test_stub(void)
struct _type_info type_info
static ULONG WINAPI invoketest_Release(IInvokeTest *iface)
static OLECHAR OLECHAR *static SYSKIND
static void _expect_ref(IUnknown *obj, ULONG ref, int line)
static HRESULT WINAPI invoketest_GetTypeInfoCount(IInvokeTest *iface, UINT *cnt)
static HRESULT WINAPI uk_QueryInterface(IUnknown *obj, REFIID iid, void **out)
static int WINAPI invoketest_get_testget5(IInvokeTest *iface, int *value1, int value2)
static HRESULT WINAPI invoketest_Invoke(IInvokeTest *iface, DISPID dispid, REFIID riid, LCID lcid, WORD flags, DISPPARAMS *dispparams, VARIANT *res, EXCEPINFO *ei, UINT *argerr)
struct _function_info function_info
static void test_CreateTypeLib(SYSKIND sys)
static VARIANT WINAPI variant_func(int a0, BOOL a1, DECIMAL a2, VARIANT a3)
static void test_dump_typelib(const WCHAR *name)
static void test_SetDocString(void)
static void create_manifest_file(const char *filename, const char *manifest)
static void test_dep(SYSKIND sys)
static const BOOL is_win64
static void test_GetLibAttr(void)
static LONG WINAPI invoketest_get_test(IInvokeTest *iface, LONG i)
static ULONG WINAPI uk_Release(IUnknown *obj)
static void WINAPI inst_func2(void *inst, VARIANT *ret, VARIANT v1, VARIANT v2)
static void test_LoadRegTypeLib(void)
static HANDLE create_actctx(const char *file)
static void WINAPI invoketest_get_testget8(IInvokeTest *iface, int *value)
#define expect_eq(expr, value, type, format)
static ULONG WINAPI uk_AddRef(IUnknown *obj)
static void WINAPI invoketest_get_testget7(IInvokeTest *iface, int value1, int value2)
static int WINAPI stdcall_func(int a)
static LONG WINAPI invoketest_putref_testprop(IInvokeTest *iface, LONG *i)
static HRESULT WINAPI collection_GetTypeInfo(ICollection *iface, UINT index, LCID lcid, ITypeInfo **ti)
static void test_SetFuncAndParamNames(void)
static void test_DispCallFunc(void)
static HRESULT WINAPI collection_QueryInterface(ICollection *iface, REFIID riid, void **ret)
static void test_TypeInfo(void)
static void test_TypeComp(void)
static const ICollectionVtbl collectionvtbl
static void test_create_typelibs(void)
static LSTATUS myRegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey, REGSAM view)
#define check_variant_info(value, expected)
#define expect_int(expr, value)
static BOOL compare_wstr(const WCHAR *wstr, const WCHAR *ref)
#define expect_guid(expected, guid)
#define EXPECT_REF(obj, ref)
#define expect_null(expr)
static HRESULT WINAPI collection_GetTypeInfoCount(ICollection *iface, UINT *cnt)
static void test_CreateDispTypeInfo(void)
static double WINAPI double_func(double a0, float a1, double a2, int a3)
static HRESULT WINAPI invoketest_testget(IInvokeTest *iface, ICollection **p)
static void test_FindName(void)
static VARIANT WINAPI variant_func2(VARIANT v1, VARIANT v2)
static void test_SetTypeDescAlias(SYSKIND kind)
static void test_TypeInfo2_GetContainingTypeLib(void)
static HRESULT WINAPI ret_false_func(void)
static void WINAPI invoketest_get_testput8(IInvokeTest *iface, int value)
static void test_register_typelib_64(void)
static int WINAPI invoketest_get_testget3(IInvokeTest *iface)
static void ref_count_test(LPCWSTR type_lib)
static const IInvokeTestVtbl invoketestvtbl
static HRESULT WINAPI invoketest_GetIDsOfNames(IInvokeTest *iface, REFIID riid, LPOLESTR *names, UINT cnt, LCID lcid, DISPID *dispid)
static void parse_guid(LPCSTR strGuid, GUID *guid)
struct _element_info element_info
static struct _TDATest TDATests[]
static void testTDA(ITypeLib *tl, struct _TDATest *TDATest, ULONG ptr_size, HREFTYPE hreftype, ULONG href_cbSizeInstance, WORD href_cbAlignment, BOOL create)
static void test_inheritance(void)
static void test_SetVarHelpContext(void)
static ULONG WINAPI collection_AddRef(ICollection *iface)
static WCHAR * create_test_typelib(int res_no)
struct _custdata_info custdata_info
static int WINAPI invoketest_get_testget6(IInvokeTest *iface, int value1, int value2)
static HRESULT WINAPI invoketest_QueryInterface(IInvokeTest *iface, REFIID riid, void **ret)
static const SYSKIND info_syskind
static int WINAPI invoketest_get_testget4(IInvokeTest *iface, int value)
static BOOL do_typelib_reg_key(GUID *uid, WORD maj, WORD min, DWORD arch, LPCWSTR base, BOOL remove)
#define check_type(elem, info)
static HRESULT WINAPI collection_GetIDsOfNames(ICollection *iface, REFIID riid, LPOLESTR *names, UINT cnt, LCID lcid, DISPID *dispid)
static const char manifest_main[]
static VARIANTARG static DISPID
#define LOCALE_USER_DEFAULT
#define TYPE_ALIGNMENT(t)
#define LOCALE_SYSTEM_DEFAULT
#define MAKELCID(lgid, srtid)
#define MAKEINTRESOURCE(i)
@ COINIT_APARTMENTTHREADED
BSTR WINAPI SysAllocString(LPCOLESTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
#define DISPATCH_PROPERTYPUT
#define DISPATCH_PROPERTYGET
#define DISPATCH_PROPERTYPUTREF
static const WCHAR szName[]
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
static unsigned __int64 next
RPC_STATUS WINAPI UuidCreate(UUID *Uuid)
#define SUBLANG_ENGLISH_US
static __inline const char * wine_dbgstr_guid(const GUID *id)
#define _WIN32_WINNT_WS08
custdata_info custdata[5]
custdata_info custdata[5]
custdata_info custdata[5]
union _var_info::@1859 DUMMYUNIONNAME
custdata_info custdata[5]
static const CHAR manifest[]
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
static struct wctab tab[]
_In_ WDFCOLLECTION _In_ ULONG Index
DWORD WINAPI GetLastError(void)
#define TYPE_E_BADMODULEKIND
#define TYPE_E_REGISTRYACCESS
#define TYPE_E_ELEMENTNOTFOUND
#define DISP_E_BADVARTYPE
#define TYPE_E_AMBIGUOUSNAME
#define TYPE_E_INCONSISTENTPROPFUNCS
#define DISP_E_BADPARAMCOUNT
#define TYPE_E_TYPEMISMATCH
#define TYPE_E_CANTLOADLIBRARY
#define DISP_E_MEMBERNOTFOUND
#define TYPE_E_NAMECONFLICT
#define RPC_S_UUID_LOCAL_ONLY
#define TYPE_E_LIBNOTREGISTERED
#define DISP_E_UNKNOWNNAME
#define HKEY_CLASSES_ROOT
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)