2133 {
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}};
2158
2170 MEMBERID memids[2];
2171 FUNCDESC funcdesc, *pfuncdesc;
2172 ELEMDESC elemdesc[5], *edesc;
2173 PARAMDESCEX paramdescex;
2174 TYPEDESC typedesc1, typedesc2;
2175 TYPEATTR *typeattr;
2176 TLIBATTR *libattr;
2177 HREFTYPE hreftype;
2180 int impltypeflags;
2181 unsigned int cnames;
2185 TYPEKIND kind;
2186 DESCKIND desckind;
2187 BINDPTR bindptr;
2189
2190 switch(sys){
2195 break;
2200 break;
2201 default:
2202 return;
2203 }
2204
2207
2210
2213 ok(typeattr->cbSizeVft == 3 *
sizeof(
void*),
"Got wrong cbSizeVft: %u\n", typeattr->cbSizeVft);
2214 ITypeInfo_ReleaseTypeAttr(
unknown, typeattr);
2215
2218
2221
2224
2225 hres = ICreateTypeLib2_QueryInterface(createtl, &IID_ITypeLib, (
void**)&tl);
2227
2228 hres = ITypeLib_GetTypeInfo(tl, 0,
NULL);
2230
2231 hres = ITypeLib_GetTypeInfoType(tl, 0, &kind);
2233
2234 hres = ITypeLib_GetTypeInfoType(tl, 0,
NULL);
2236
2237 hres = ITypeLib_GetTypeInfoType(tl, 0,
NULL);
2239
2240 hres = ITypeLib_GetLibAttr(tl,
NULL);
2242
2243 hres = ITypeLib_GetLibAttr(tl, &libattr);
2245
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);
2250
2251 ITypeLib_ReleaseTLibAttr(tl, libattr);
2252
2254 hres = ITypeLib_GetDocumentation(tl, -1, &
name, &docstring, &helpcontext, &
helpfile);
2257 ok(docstring ==
NULL,
"docstring != NULL\n");
2258 ok(helpcontext == 0,
"helpcontext != 0\n");
2260
2263
2264 hres = ICreateTypeLib2_SetName(createtl, typelibW);
2266
2267 hres = ICreateTypeLib2_SetHelpFileName(createtl, helpfileW);
2269
2272
2277
2280
2282 V_I4(&cust_data) = 1;
2283 hres = ICreateTypeLib2_SetCustData(createtl, &tlcustguid, &cust_data);
2285
2286 hres = ITypeLib_QueryInterface(tl, &IID_ITypeLib2, (
void**)&tl2);
2288
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));
2295
2296 ITypeLib2_Release(tl2);
2297
2298
2301
2304
2307
2310
2311 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&interface1);
2313
2317
2319
2320 ITypeLib_Release(tl);
2321
2324 hres = ITypeInfo_GetDocumentation(interface1, -1, &
name, &docstring, &helpcontext, &
helpfile);
2327 ok(docstring ==
NULL,
"docstring != NULL\n");
2328 ok(helpcontext == 0,
"helpcontext != 0\n");
2330
2333
2336
2337 hres = ITypeInfo_GetRefTypeInfo(interface1, 0,
NULL);
2339
2340
2341 hres = ICreateTypeInfo_LayOut(createti);
2343
2344 hres = ICreateTypeInfo_SetGuid(createti, &interfaceguid);
2346
2347 hres = ICreateTypeInfo_AddRefTypeInfo(createti,
NULL, &hreftype);
2349
2352
2353 hres = ICreateTypeInfo_AddRefTypeInfo(createti,
unknown, &hreftype);
2355
2356 hres = ICreateTypeInfo_AddImplType(createti, 1, hreftype);
2358
2359 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
2361
2362 hres = ITypeInfo_GetRefTypeOfImplType(interface1, 0, &hreftype);
2364 ok(hreftype == 3,
"hreftype = %ld\n", hreftype);
2365
2366 hres = ITypeInfo_GetRefTypeInfo(interface1, hreftype, &ti);
2368
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);
2376
2377 ITypeInfo_Release(ti);
2378
2379 hres = ITypeInfo_GetRefTypeOfImplType(interface1, -1, &hreftype);
2381
2382 ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo2, (void**)&ti2);
2383
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;
2390
2391 hres = ICreateTypeInfo_AddFuncDesc(createti, 0,
NULL);
2393
2394 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2396
2397 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
2399
2400 hres = ITypeInfo2_GetFuncDesc(ti2, 0,
NULL);
2402
2403 hres = ITypeInfo2_GetFuncDesc(ti2, 1, &pfuncdesc);
2405
2406 hres = ITypeInfo2_GetFuncDesc(ti2, 0, &pfuncdesc);
2408
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);
2422
2423 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2424
2425 hres = ICreateTypeInfo_SetFuncHelpContext(createti, 0, 0xabcdefab);
2427
2428 funcdesc.invkind = INVOKE_PROPERTYPUT;
2429 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2431
2432 funcdesc.invkind = INVOKE_PROPERTYPUTREF;
2433 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2435
2436 elemdesc[0].tdesc.vt =
VT_BSTR;
2437 elemdesc[0].idldesc.dwReserved = 0;
2438 elemdesc[0].idldesc.wIDLFlags = IDLFLAG_FIN;
2439
2440 funcdesc.lprgelemdescParam = elemdesc;
2441 funcdesc.invkind = INVOKE_PROPERTYPUT;
2442 funcdesc.cParams = 1;
2443 funcdesc.elemdescFunc.tdesc.vt =
VT_VOID;
2444
2445 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2447
2448 hres = ICreateTypeInfo_SetFuncHelpContext(createti, 1, 0xabcdefab);
2450
2451 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, propname, 0);
2453
2454 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0,
NULL, 1);
2456
2457 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, propname, 1);
2459
2460 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 1, propname, 1);
2462
2463 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 1, propname, 2);
2465
2466 hres = ITypeInfo2_GetFuncDesc(ti2, 1, &pfuncdesc);
2468
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);
2482
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);
2486
2487 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2488
2489
2490 funcdesc.invkind = INVOKE_PROPERTYPUTREF;
2491 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
2493
2494 hres = ICreateTypeInfo_SetFuncHelpContext(createti, 0, 0xabcdefab);
2496
2497 hres = ICreateTypeInfo_SetFuncHelpContext(createti, 0, 0x201);
2499
2500 funcdesc.memid = 1;
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);
2508
2509 hres = ITypeInfo2_GetFuncDesc(ti2, 1, &pfuncdesc);
2511
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);
2525
2526 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2527
2529 hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
2531
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);
2539
2540 hres = ITypeInfo2_GetFuncDesc(ti2, 4, &pfuncdesc);
2542
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);
2556
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);
2563
2564 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2565
2566 elemdesc[0].tdesc.lptdesc = &typedesc2;
2568 typedesc2.lptdesc = &typedesc1;
2569 hres = ICreateTypeInfo_AddFuncDesc(createti, 4, &funcdesc);
2571
2572 hres = ITypeInfo2_GetFuncDesc(ti2, 4, &pfuncdesc);
2574
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);
2588
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);
2597
2598 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2599
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);
2607
2608 hres = ITypeInfo2_GetFuncDesc(ti2, 3, &pfuncdesc);
2610
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);
2624
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));
2635
2636 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2637
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);
2648
2649 hres = ITypeInfo2_GetFuncDesc(ti2, 3, &pfuncdesc);
2651
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);
2665
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);
2670
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));
2681
2682 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2683
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);
2691
2692 elemdesc[0].tdesc.vt =
VT_BSTR;
2693 elemdesc[1].tdesc.vt =
VT_BSTR;
2696 hres = ICreateTypeInfo_AddFuncDesc(createti, 3, &funcdesc);
2699
2700 hres = ITypeInfo2_GetFuncDesc(ti2, 3, &pfuncdesc);
2702
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);
2716
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));
2726 "got: %s\n",
2728
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));
2738 "got: %s\n",
2740
2741 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2742
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;
2749
2750 funcdesc.lprgelemdescParam = elemdesc;
2751 funcdesc.invkind = INVOKE_FUNC;
2752 funcdesc.cParams = 1;
2753 funcdesc.elemdescFunc.tdesc.vt =
VT_VOID;
2754
2755 hres = ICreateTypeInfo_AddFuncDesc(createti, 5, &funcdesc);
2757
2758 hres = ITypeInfo2_GetFuncDesc(ti2, 5, &pfuncdesc);
2760
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);
2774
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));
2785
2786 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2787
2789 elemdesc[0].paramdesc.pparamdescex = ¶mdescex;
2790 elemdesc[0].paramdesc.wParamFlags = PARAMFLAG_FHASDEFAULT;
2792 V_INT(¶mdescex.varDefaultValue) = 3;
2793
2794 funcdesc.lprgelemdescParam = elemdesc;
2795 funcdesc.invkind = INVOKE_FUNC;
2796 funcdesc.cParams = 1;
2798
2799 hres = ICreateTypeInfo_AddFuncDesc(createti, 6, &funcdesc);
2801
2802 hres = ITypeInfo2_GetFuncDesc(ti2, 6, &pfuncdesc);
2804
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);
2818
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));
2828
2829 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2830
2831 hres = ITypeInfo_GetDocumentation(interface1, 0, &
name, &docstring, &helpcontext, &
helpfile);
2834 ok(docstring ==
NULL,
"docstring != NULL\n");
2835 ok(helpcontext == 0x201,
"helpcontext != 0x201\n");
2837
2839
2840 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 1000,
NULL, 1);
2842
2843 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 1000, names1, 1);
2845
2846 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, names1, 2);
2848
2849 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, names2, 1);
2851
2852 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, names1, 1);
2854
2858
2860
2861 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 3, names2, 3);
2863
2864 hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 3, names1, 3);
2866
2867 ITypeInfo2_Release(ti2);
2868 ICreateTypeInfo_Release(createti);
2869
2872
2875
2876 hres = ICreateTypeInfo_SetGuid(createti, &interface2guid);
2878
2879 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&interface2);
2881
2882 hres = ITypeInfo_GetRefTypeOfImplType(interface2, 0, &hreftype);
2884
2885 hres = ICreateTypeInfo_AddRefTypeInfo(createti, interface1, &hreftype);
2887
2888 hres = ITypeInfo_GetRefTypeInfo(interface2, 0, &ti);
2890 ok(ti == interface1,
"Received and added interfaces are different\n");
2891
2892 ITypeInfo_Release(ti);
2893
2894 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
2896
2897 hres = ITypeInfo_GetRefTypeOfImplType(interface2, 0, &hreftype);
2899 ok(hreftype == 2,
"hreftype = %ld\n", hreftype);
2900
2901 hres = ITypeInfo_GetRefTypeOfImplType(interface2, -1, &hreftype);
2903
2904 hres = ICreateTypeInfo_SetImplTypeFlags(createti, 0, IMPLTYPEFLAG_FDEFAULT);
2906
2907 hres = ITypeInfo_GetImplTypeFlags(interface2, 0, &impltypeflags);
2909 ok(impltypeflags == 0,
"impltypeflags = %x\n", impltypeflags);
2910
2911 hres = ITypeInfo_GetImplTypeFlags(interface2, 1, &impltypeflags);
2913
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);
2921 }
2923 funcdesc.oVft = 0xaaa8;
2924 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
2926
2927 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&ti2);
2929
2930 hres = ITypeInfo2_GetFuncDesc(ti2, 0, &pfuncdesc);
2932
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);
2945
2946 ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc);
2947 ITypeInfo2_Release(ti2);
2948
2949 funcdesc.oVft = 0;
2950
2951 ICreateTypeInfo_Release(createti);
2952
2954
2957
2958 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ICreateTypeInfo2, (
void**)&createti2);
2960
2961 hres = ICreateTypeInfo2_QueryInterface(createti2, &IID_ITypeInfo2, (
void**)&ti2);
2963
2966
2967 hres = ITypeInfo2_GetCustData(ti2, &custguid,
NULL);
2969
2970 hres = ITypeInfo2_GetCustData(ti2, &custguid, &cust_data);
2972
2973 hres = ICreateTypeInfo2_SetCustData(createti2,
NULL,
NULL);
2975
2976 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid,
NULL);
2978
2979 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid, &cust_data);
2981
2983 V_I4(&cust_data) = 0xdeadbeef;
2984
2985 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid, &cust_data);
2987
2988 V_I4(&cust_data) = 0;
2990
2991 hres = ITypeInfo2_GetCustData(ti2, &custguid, &cust_data);
2993
2995 ok(
V_I4(&cust_data) == 0xdeadbeef,
"got 0x%08lx\n",
V_I4(&cust_data));
2996
2998 V_I4(&cust_data) = 12345678;
2999
3000 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid, &cust_data);
3002
3003 V_I4(&cust_data) = 0;
3005
3006 hres = ITypeInfo2_GetCustData(ti2, &custguid, &cust_data);
3008
3010 ok(
V_I4(&cust_data) == 12345678,
"got 0x%08lx\n",
V_I4(&cust_data));
3011
3014
3015 hres = ICreateTypeInfo2_SetCustData(createti2, &custguid, &cust_data);
3017
3019 V_I4(&cust_data) = 0;
3021
3022 hres = ITypeInfo2_GetCustData(ti2, &custguid, &cust_data);
3024
3028
3030 V_UI4(&cust_data) = 17;
3031
3032 hres = ITypeInfo2_GetCustData(ti2, &bogusguid, &cust_data);
3034
3036
3037 ITypeInfo2_Release(ti2);
3038 ICreateTypeInfo2_Release(createti2);
3039 ICreateTypeInfo_Release(createti);
3040
3041 hres = ICreateTypeLib2_CreateTypeInfo(createtl, coclassW,
TKIND_COCLASS, &createti);
3043
3044 hres = ICreateTypeInfo_AddRefTypeInfo(createti, interface1, &hreftype);
3046
3047 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
3049
3050 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
3052
3053 hres = ICreateTypeInfo_AddRefTypeInfo(createti,
unknown, &hreftype);
3055
3056 hres = ICreateTypeInfo_AddImplType(createti, 1, hreftype);
3058
3059 hres = ICreateTypeInfo_AddImplType(createti, 1, hreftype);
3061
3062 hres = ICreateTypeInfo_AddImplType(createti, 2, hreftype);
3064
3065 hres = ICreateTypeInfo_SetImplTypeFlags(createti, 0, IMPLTYPEFLAG_FDEFAULT);
3067
3068 hres = ICreateTypeInfo_SetImplTypeFlags(createti, 1, IMPLTYPEFLAG_FRESTRICTED);
3070
3071 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&ti);
3073
3074 hres = ITypeInfo_GetImplTypeFlags(ti, 0,
NULL);
3076
3077 hres = ITypeInfo_GetImplTypeFlags(ti, 0, &impltypeflags);
3079 ok(impltypeflags == IMPLTYPEFLAG_FDEFAULT,
"impltypeflags = %x\n", impltypeflags);
3080
3081 hres = ITypeInfo_GetImplTypeFlags(ti, 1, &impltypeflags);
3083 ok(impltypeflags == IMPLTYPEFLAG_FRESTRICTED,
"impltypeflags = %x\n", impltypeflags);
3084
3085 hres = ITypeInfo_GetImplTypeFlags(ti, 2, &impltypeflags);
3087 ok(impltypeflags == 0,
"impltypeflags = %x\n", impltypeflags);
3088
3089 hres = ITypeInfo_GetRefTypeOfImplType(ti, 0, &hreftype);
3091 ok(hreftype == 0,
"hreftype = %ld\n", hreftype);
3092
3093 hres = ITypeInfo_GetRefTypeOfImplType(ti, 1, &hreftype);
3095 ok(hreftype == 1,
"hreftype = %ld\n", hreftype);
3096
3097 hres = ITypeInfo_GetRefTypeOfImplType(ti, 2, &hreftype);
3099 ok(hreftype == 1,
"hreftype = %ld\n", hreftype);
3100
3101 hres = ITypeInfo_GetRefTypeOfImplType(ti, -1, &hreftype);
3103
3104 ITypeInfo_Release(ti);
3105
3106 ICreateTypeInfo_Release(createti);
3107
3110
3111 hres = ICreateTypeInfo_SetTypeFlags(createti, TYPEFLAG_FDUAL);
3113
3114 hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc);
3116
3117 hres = ICreateTypeInfo_AddRefTypeInfo(createti,
dispatch, &hreftype);
3119
3120 hres = ICreateTypeInfo_AddImplType(createti, 0, hreftype);
3122
3123 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&dual);
3125
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);
3139
3140 ITypeInfo_ReleaseTypeAttr(dual, typeattr);
3141
3142 hres = ITypeInfo_GetRefTypeOfImplType(dual, -1, &hreftype);
3144 ok(hreftype == -2,
"got %08lx\n", hreftype);
3145
3147 hres = ITypeInfo_GetRefTypeInfo(dual, -2, &ti);
3151
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);
3165
3166 ITypeInfo_ReleaseTypeAttr(ti, typeattr);
3167
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");
3173}
3174 ITypeInfo_AddRef(ti_2);
3177 ITypeInfo_Release(ti_2);
3178
3179 ITypeInfo_Release(ti_2);
3180 ITypeInfo_Release(ti);
3181
3182 hres = ICreateTypeInfo_SetTypeDescAlias(createti, &typedesc1);
3184
3185 ICreateTypeInfo_Release(createti);
3186
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);
3200
3201 ITypeInfo_ReleaseTypeAttr(interface1, typeattr);
3202
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);
3217
3218 ITypeInfo_ReleaseTypeAttr(interface2, typeattr);
3219
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");
3223
3224 hres = ICreateTypeLib2_CreateTypeInfo(createtl, aliasW,
TKIND_ALIAS, &createti);
3226
3227 hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (
void**)&interface1);
3229
3230 if(0){
3231
3232
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);
3247 }
3248
3249 hres = ICreateTypeInfo_SetTypeDescAlias(createti,
NULL);
3251
3252 typedesc1.vt =
VT_I1;
3253 hres = ICreateTypeInfo_SetTypeDescAlias(createti, &typedesc1);
3255
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);
3270
3271 typedesc1.vt =
VT_R8;
3272 hres = ICreateTypeInfo_SetTypeDescAlias(createti, &typedesc1);
3274
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);
3289
3290 ITypeInfo_Release(interface1);
3291 ICreateTypeInfo_Release(createti);
3292
3293 hres = ICreateTypeLib2_SaveAllChanges(createtl);
3295
3296 ok(ICreateTypeLib2_Release(createtl)==0,
"Object should be freed\n");
3297
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");
3301
3304
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);
3312
3313 found = 2;
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");
3324
3325 found = 2;
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");
3336 if(tinfos[0])
3337 ITypeInfo_Release(tinfos[0]);
3338
3339 found = 2;
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");
3350 if(tinfos[0])
3351 ITypeInfo_Release(tinfos[0]);
3352
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);
3363
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);
3374
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);
3384
3385 hres = ITypeLib_GetTypeInfo(tl, 0, &ti);
3387
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);
3402
3403 hres = ITypeInfo_GetRefTypeOfImplType(ti, 0, &hreftype);
3405 ok(hreftype == 3,
"hreftype = %ld\n", hreftype);
3406
3407 hres = ITypeInfo_GetRefTypeInfo(ti, hreftype, &
unknown);
3409
3413 ITypeInfo_ReleaseTypeAttr(
unknown, typeattr);
3414
3416
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);
3433
3434 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3438 ok(helpcontext == 0x201,
"got helpcontext: 0x%lx\n", helpcontext);
3442
3443 hres = ITypeInfo_GetNames(ti, pfuncdesc->memid,
NULL, 0, &cnames);
3445
3446 cnames = 8;
3447 hres = ITypeInfo_GetNames(ti, pfuncdesc->memid,
names, 0, &cnames);
3449 ok(cnames == 0,
"got: %u\n", cnames);
3450
3453 ok(cnames == 1,
"got: %u\n", cnames);
3456
3457 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3458
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);
3474
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);
3483
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);
3499
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);
3508
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);
3524
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));
3534 "got: %s\n",
3536
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));
3546 "got: %s\n",
3548
3549 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3553 ok(helpcontext == 0,
"got helpcontext: 0x%lx\n", helpcontext);
3557
3560 ok(cnames == 3,
"got: %u\n", cnames);
3567 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3568
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);
3584
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));
3595
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));
3606
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);
3615
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);
3631
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);
3644
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);
3653
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);
3669
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);
3682
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);
3691
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);
3707
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);
3712
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));
3723
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);
3732
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);
3748
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));
3759
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);
3768
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);
3784
3785 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3789 ok(helpcontext == 0x201,
"got helpcontext: 0x%lx\n", helpcontext);
3793
3796 ok(cnames == 1,
"got: %u\n", cnames);
3799 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3800
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);
3816
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);
3825
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);
3834
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);
3850
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);
3857
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);
3866
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);
3882
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);
3886
3887 hres = ITypeInfo_GetDocumentation(ti, pfuncdesc->memid, &
name, &docstring, &helpcontext, &
helpfile);
3891 ok(helpcontext == 0x201,
"got helpcontext: 0x%lx\n", helpcontext);
3895
3898 ok(cnames == 1,
"got: %u\n", cnames);
3901 ITypeInfo_ReleaseFuncDesc(ti, pfuncdesc);
3902
3903 hres = ITypeInfo_GetFuncDesc(ti, 13, &pfuncdesc);
3905
3906 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
3907
3908 hres = ITypeLib_GetTypeInfo(tl, 1, &ti);
3910
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);
3926
3927 hres = ITypeInfo_GetRefTypeOfImplType(ti, 0, &hreftype);
3929
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);
3944
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);
3961
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);
3976
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);
3993
3994 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
3995
3996 hres = ITypeLib_GetTypeInfo(tl, 2, &ti);
3998
3999 hres = ITypeInfo_QueryInterface(ti, &IID_ITypeInfo2, (
void**)&ti2);
4001
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);
4015
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));
4022
4023 ITypeInfo2_Release(ti2);
4024 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
4025
4026 hres = ITypeLib_GetTypeInfo(tl, 3, &ti);
4028
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);
4042
4043 hres = ITypeInfo_GetRefTypeOfImplType(ti, 0, &hreftype);
4045 ok(hreftype == 0,
"got wrong hreftype: %lx\n", hreftype);
4046
4047 hres = ITypeInfo_GetImplTypeFlags(ti, 0, &impltypeflags);
4049 ok(impltypeflags == IMPLTYPEFLAG_FDEFAULT,
"got wrong flag: %x\n", impltypeflags);
4050
4051 hres = ITypeInfo_GetRefTypeOfImplType(ti, 1, &hreftype);
4053 ok(hreftype == 1,
"got wrong hreftype: %lx\n", hreftype);
4054
4055 hres = ITypeInfo_GetImplTypeFlags(ti, 1, &impltypeflags);
4057 ok(impltypeflags == IMPLTYPEFLAG_FRESTRICTED,
"got wrong flag: %x\n", impltypeflags);
4058
4059 hres = ITypeInfo_GetRefTypeOfImplType(ti, 2, &hreftype);
4061 ok(hreftype == 1,
"got wrong hreftype: %lx\n", hreftype);
4062
4063 hres = ITypeInfo_GetImplTypeFlags(ti, 2, &impltypeflags);
4065 ok(impltypeflags == 0,
"got wrong flag: %x\n", impltypeflags);
4066
4067 hres = ITypeInfo_GetRefTypeOfImplType(ti, 3, &hreftype);
4069
4070 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
4071
4072 hres = ITypeLib_GetTypeInfo(tl, 4, &ti);
4074
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);
4089
4090 hres = ITypeInfo_GetTypeComp(ti, &tcomp);
4092
4093 hres = ITypeInfo_QueryInterface(ti, &IID_ITypeComp, (
void**)&tcomp2);
4095 ok(tcomp == tcomp2,
"got %p, was %p\n", tcomp2, tcomp);
4096 ITypeComp_Release(tcomp2);
4097
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);
4113
4114 ITypeInfo_ReleaseFuncDesc(interface1, bindptr.lpfuncdesc);
4115 ITypeInfo_Release(interface1);
4116 ITypeComp_Release(tcomp);
4117
4118 hres = ITypeInfo_GetRefTypeOfImplType(ti, -1, &hreftype);
4120 ok(hreftype == -2,
"got wrong hreftype: %lx\n", hreftype);
4121
4122 hres = ITypeInfo_GetRefTypeInfo(ti, hreftype, &interface1);
4124
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);
4139
4140 ITypeInfo_Release(interface1);
4141
4142 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
4143
4144 hres = ITypeLib_GetTypeInfo(tl, 5, &ti);
4146
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);
4161
4162 ok(ITypeInfo_Release(ti) == 0,
"Object should be freed\n");
4163
4164 ok(ITypeLib_Release(tl)==0,
"Object should be freed\n");
4165
4168}
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
static const TCHAR helpfile[]
void dispatch(HANDLE hStopEvent)
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
HRESULT WINAPI LoadTypeLibEx(LPCOLESTR szFile, REGKIND regkind, ITypeLib **pptLib)
#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
static const DWORD ptr_size
static const WCHAR filenameW[]
static OLECHAR OLECHAR *static SYSKIND
static BOOL compare_wstr(const WCHAR *wstr, const WCHAR *ref)
#define EXPECT_REF(obj, ref)
coclass SHDocVw::ShellWindows dual
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
#define TYPE_E_BADMODULEKIND
#define TYPE_E_ELEMENTNOTFOUND
#define DISP_E_BADVARTYPE
#define TYPE_E_AMBIGUOUSNAME
#define TYPE_E_INCONSISTENTPROPFUNCS
#define TYPE_E_NAMECONFLICT