108#ifdef WORDS_BIGENDIAN
111 return (((p_iVal & 0x00FF) << 8) |
112 ((p_iVal & 0xFF00) >> 8));
118 return (((p_iVal & 0x000000FF) << 24) |
119 ((p_iVal & 0x0000FF00) << 8) |
120 ((p_iVal & 0x00FF0000) >> 8) |
121 ((p_iVal & 0xFF000000) >> 24));
124#define FromLEWord(X) (X)
125#define FromLEDWord(X) (X)
128#define DISPATCH_HREF_OFFSET 0x01000000
129#define DISPATCH_HREF_MASK 0xff000000
136#ifdef WORDS_BIGENDIAN
141 p_iSize /=
sizeof(
WORD);
155 p_iSize /=
sizeof(
DWORD);
164#define FromLEWords(X,Y)
165#define FromLEDWords(X,Y)
176 INT best_maj = -1, best_min = -1;
195 if (*wMaj == 0xffff && *wMin == 0xffff)
197 if (v_maj > best_maj) best_maj = v_maj;
198 if (v_min > best_min) best_min = v_min;
200 else if (*wMaj == v_maj)
209 if (*wMin != 0xffff && v_min >= *wMin && v_min > best_min) best_min = v_min;
216 TRACE(
"found best_maj %d, best_min %d\n", best_maj, best_min);
218 if (*wMaj == 0xffff && *wMin == 0xffff)
220 if (best_maj >= 0 && best_min >= 0)
228 if (*wMaj == best_maj && best_min >= 0)
266 TRACE(
"Typelib is for unsupported syskind %i\n", syskind);
303 ACTCTX_SECTION_KEYED_DATA
data;
350 else if (myLCID ==
lcid)
459 if (!szFile || !pptLib)
471 if (((szFile[0] ==
'\\') && (szFile[1] ==
'\\')) ||
472 (szFile[0] && (szFile[1] ==
':')))
break;
478 ITypeLib_Release(*pptLib);
526 if ((wVerMajor!=0xffff || wVerMinor!=0xffff) && *ppTLib)
530 res = ITypeLib_GetLibAttr(*ppTLib, &
attr);
534 ITypeLib_ReleaseTLibAttr(*ppTLib,
attr);
538 ITypeLib_Release(*ppTLib);
560 const WCHAR *proxy_clsid;
562 if (tattr->typekind ==
TKIND_INTERFACE || (tattr->wTypeFlags & TYPEFLAG_FDUAL))
563 proxy_clsid =
L"{00020424-0000-0000-C000-000000000046}";
565 proxy_clsid =
L"{00020420-0000-0000-C000-000000000046}";
623 if (ptlib ==
NULL || szFullPath ==
NULL)
626 if (
FAILED(ITypeLib_GetLibAttr(ptlib, &
attr)))
640 if (
FAILED(ITypeLib_GetDocumentation(ptlib, -1, &libName, &doc,
NULL,
NULL)))
642 else if (doc || libName)
703 while (
'0' <= *end_ptr && *end_ptr <=
'9') end_ptr++;
715 if (szHelpDir !=
NULL) {
734 types = ITypeLib_GetTypeInfoCount(ptlib);
735 for (tidx=0; tidx<
types; tidx++) {
736 if (
SUCCEEDED(ITypeLib_GetTypeInfoType(ptlib, tidx, &kind))) {
745 ITypeLib_GetTypeInfo(ptlib, tidx, &tinfo);
750 ITypeLib_GetTypeInfo(ptlib, tidx, &tinfo);
759 TYPEATTR *tattr =
NULL;
760 ITypeInfo_GetTypeAttr(tinfo, &tattr);
768#define XX(x) if (TYPEFLAG_##x & tattr->wTypeFlags) MESSAGE(#x"|");
790 if ((kind ==
TKIND_INTERFACE && (tattr->wTypeFlags & TYPEFLAG_FOLEAUTOMATION)) ||
805 ITypeInfo_ReleaseTypeAttr(tinfo, tattr);
808 ITypeInfo_Release(tinfo);
815 ITypeLib_ReleaseTLibAttr(ptlib,
attr);
822 WCHAR subKeyName[50];
858 WCHAR subKeyName[50];
861 BOOL deleteOtherStuff;
863 TYPEATTR* typeAttr =
NULL;
876 TRACE(
"Unsupported syskind %i\n", syskind);
900 numTypes = ITypeLib_GetTypeInfoCount(typeLib);
901 for (
i=0;
i<numTypes;
i++) {
903 if (ITypeLib_GetTypeInfoType(typeLib,
i, &kind) !=
S_OK) {
911 if (ITypeLib_GetTypeInfo(typeLib,
i, &typeInfo) !=
S_OK) {
914 if (ITypeInfo_GetTypeAttr(typeInfo, &typeAttr) !=
S_OK) {
918 if ((kind ==
TKIND_INTERFACE && (typeAttr->wTypeFlags & TYPEFLAG_FOLEAUTOMATION)) ||
934 if (typeAttr) ITypeInfo_ReleaseTypeAttr(typeInfo, typeAttr);
936 if (typeInfo) ITypeInfo_Release(typeInfo);
943 *
wcsrchr( subKeyName,
'\\' ) = 0;
949 deleteOtherStuff =
TRUE;
955 if (!
wcscmp(subKeyName,
L"FLAGS"))
continue;
956 if (!
wcscmp(subKeyName,
L"HELPDIR"))
continue;
957 deleteOtherStuff =
FALSE;
962 if (deleteOtherStuff) {
975 if (typeLib) ITypeLib_Release(typeLib);
998 FIXME(
"(%p, %s, %s) registering the typelib system-wide\n", ptlib,
1018 FIXME(
"%s, %u, %u, %#lx, %u unregistering the typelib system-wide\n",
1160#define TLB_REF_USE_GUID -2
1162#define TLB_REF_INTERNAL (void*)-2
1163#define TLB_REF_NOT_FOUND (void*)-1
1315 WARN(
"Unhandled syskind: 0x%x\n", syskind);
1362 pTD->lpadesc->cDims);
1374 MESSAGE(
"\t\ttdesc.vartype %d (%s)\n",edesc->tdesc.vt,
buf);
1375 MESSAGE(
"\t\tu.paramdesc.wParamFlags");
1378 if (
flags & PARAMFLAG_FOUT)
MESSAGE(
" PARAMFLAG_FOUT");
1379 if (
flags & PARAMFLAG_FLCID)
MESSAGE(
" PARAMFLAG_FLCID");
1380 if (
flags & PARAMFLAG_FRETVAL)
MESSAGE(
" PARAMFLAG_FRETVAL");
1381 if (
flags & PARAMFLAG_FOPT)
MESSAGE(
" PARAMFLAG_FOPT");
1382 if (
flags & PARAMFLAG_FHASDEFAULT)
MESSAGE(
" PARAMFLAG_FHASDEFAULT");
1383 if (
flags & PARAMFLAG_FHASCUSTDATA)
MESSAGE(
" PARAMFLAG_FHASCUSTDATA");
1384 MESSAGE(
"\n\t\tu.paramdesc.lpex %p\n",edesc->paramdesc.pparamdescex);
1388 MESSAGE(
"memid is %#lx\n", funcdesc->memid);
1389 for (
i=0;
i<funcdesc->cParams;
i++) {
1393 MESSAGE(
"\tfunckind: %d (",funcdesc->funckind);
1394 switch (funcdesc->funckind) {
1395 case FUNC_VIRTUAL:
MESSAGE(
"virtual");
break;
1396 case FUNC_PUREVIRTUAL:
MESSAGE(
"pure virtual");
break;
1397 case FUNC_NONVIRTUAL:
MESSAGE(
"nonvirtual");
break;
1398 case FUNC_STATIC:
MESSAGE(
"static");
break;
1399 case FUNC_DISPATCH:
MESSAGE(
"dispatch");
break;
1400 default:
MESSAGE(
"unknown");
break;
1402 MESSAGE(
")\n\tinvkind: %d (",funcdesc->invkind);
1403 switch (funcdesc->invkind) {
1404 case INVOKE_FUNC:
MESSAGE(
"func");
break;
1405 case INVOKE_PROPERTYGET:
MESSAGE(
"property get");
break;
1406 case INVOKE_PROPERTYPUT:
MESSAGE(
"property put");
break;
1407 case INVOKE_PROPERTYPUTREF:
MESSAGE(
"property put ref");
break;
1409 MESSAGE(
")\n\tcallconv: %d (",funcdesc->callconv);
1410 switch (funcdesc->callconv) {
1412 case CC_PASCAL:
MESSAGE(
"pascal");
break;
1414 case CC_SYSCALL:
MESSAGE(
"syscall");
break;
1417 MESSAGE(
")\n\toVft: %d\n", funcdesc->oVft);
1418 MESSAGE(
"\tcParamsOpt: %d\n", funcdesc->cParamsOpt);
1419 MESSAGE(
"\twFlags: %x\n", funcdesc->wFuncFlags);
1421 MESSAGE(
"\telemdescFunc (return value type):\n");
1442 for (
i=0;
i<
pfd->funcdesc.cParams;
i++)
1451 else if(
pfd->Entry == (
void*)-1)
1452 MESSAGE(
"\tentry: invalid\n");
1481 TRACE_(
typelib)(
"v%d.%d lcid %#lx offset=%x\n",
import->wVersionMajor,
import->wVersionMinor,
import->lcid,
import->offset);
1491 if(
ref->index == -1)
1509 TRACE_(
typelib)(
"implementing/inheriting interface hRef = %lx implflags %x\n",
1520 TRACE(
"args=%u named args=%u\n", pdp->cArgs, pdp->cNamedArgs);
1522 if (pdp->cNamedArgs && pdp->rgdispidNamedArgs)
1524 TRACE(
"named args:\n");
1526 TRACE(
"\t0x%lx\n", pdp->rgdispidNamedArgs[
index] );
1529 if (pdp->cArgs && pdp->rgvarg)
1539 TRACE(
"%p ref %lu\n", pty, pty->
ref);
1559 MESSAGE(
"wVarFlags %x\n",
v->wVarFlags);
1560 MESSAGE(
"varkind %d\n",
v->varkind);
1587 if (alloc_initial_space)
1588 size +=
sizeof(TYPEDESC);
1662 if (
typeinfo->funcdescs[
i].funcdesc.memid == memid)
1675 if (
typeinfo->funcdescs[
i].funcdesc.memid == memid &&
typeinfo->funcdescs[
i].funcdesc.invkind == invkind)
1688 if (
typeinfo->vardescs[
i].vardesc.memid == memid)
1810 const GUID *new_guid, HREFTYPE hreftype)
1824 guid->hreftype = hreftype;
1855 cust_data->
guid = tlbguid;
1868 if (custdata_list->
prev == custdata_list->
next)
1872 custdata_list->
prev->next = custdata_list;
1873 custdata_list->
next->prev = custdata_list;
1911 hr = ITypeInfo2_GetRefTypeInfo(&
info->ITypeInfo2_iface, href, &
other);
1917 ITypeInfo_Release(
other);
1927 ITypeInfo_Release(
other);
1992 for(
i = 0;
i < tdesc->lpadesc->cDims; ++
i)
1993 *
size += tdesc->lpadesc->rgbounds[
i].cElements;
2002 FIXME(
"Unsized VT: 0x%x\n", tdesc->vt);
2029 ERR(
"seek beyond end (%ld/%d)\n", where, pcx->
length );
2086 guid->offset = offs;
2131 int offs = 0, lengthInChars;
2144 len_piece = (len_piece + 4) & ~0x3;
2148 string =
malloc(len_piece + 1);
2153 string, -1,
NULL, 0);
2154 if (!lengthInChars) {
2218 switch (
V_VT(pVar)){
2280 FIXME(
"VARTYPE %d is not supported, setting pointer to NULL\n",
2325 return (invkind == INVOKE_PROPERTYGET ||
2326 invkind == INVOKE_PROPERTYPUT ||
2327 invkind == INVOKE_PROPERTYPUTREF);
2363 int infolen, nameoffset, reclength,
i;
2366 char *recbuf =
malloc(0xffff);
2376 for (
i = 0;
i < cFuncs ;
i++ )
2382 offset + infolen + (cFuncs + cVars +
i + 1) *
sizeof(
INT));
2387 reclength &= 0xffff;
2393 if (pFuncRec->
FKCCIC & 0x1000)
2404 if (pFuncRec->
FKCCIC & 0x2000 )
2407 ERR(
"ordinal 0x%08x invalid, IS_INTRESOURCE is false\n", pFuncRec->
oEntry);
2426 ptfd->funcdesc.funckind = (pFuncRec->
FKCCIC) & 0x7;
2427 ptfd->funcdesc.invkind = (pFuncRec->
FKCCIC) >> 3 & 0xF;
2428 ptfd->funcdesc.callconv = (pFuncRec->
FKCCIC) >> 8 & 0xF;
2429 ptfd->funcdesc.cParams = pFuncRec->
nrargs ;
2430 ptfd->funcdesc.cParamsOpt = pFuncRec->
nroargs ;
2431 if (ptfd->funcdesc.funckind == FUNC_DISPATCH)
2432 ptfd->funcdesc.oVft = 0;
2435 ptfd->funcdesc.wFuncFlags =
LOWORD(pFuncRec->
Flags) ;
2439 if ((nameoffset == -1) && (
i > 0) &&
2442 ptfd->Name = ptfd_prev->
Name;
2448 &ptfd->funcdesc.elemdescFunc.tdesc);
2456 ptfd->funcdesc.lprgelemdescParam =
2457 calloc(pFuncRec->
nrargs,
sizeof(ELEMDESC) +
sizeof(PARAMDESCEX));
2464 for (
j = 0 ;
j < pFuncRec->
nrargs ;
j++ )
2466 ELEMDESC *elemdesc = &ptfd->funcdesc.lprgelemdescParam[
j];
2472 elemdesc->paramdesc.wParamFlags = paraminfo.
Flags;
2475 if (paraminfo.
oName != -1)
2476 ptfd->pParamDesc[
j].Name =
2481 if ( (elemdesc->paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) &&
2482 (pFuncRec->
FKCCIC & 0x1000) )
2484 INT* pInt = (
INT *)((
char *)pFuncRec +
2488 PARAMDESC* pParamDesc = &elemdesc->paramdesc;
2490 pParamDesc->pparamdescex = (PARAMDESCEX*)(ptfd->funcdesc.lprgelemdescParam+pFuncRec->
nrargs)+
j;
2491 pParamDesc->pparamdescex->cBytes =
sizeof(PARAMDESCEX);
2497 elemdesc->paramdesc.pparamdescex =
NULL;
2502 pFuncRec->
FKCCIC & 0x80 )
2506 &ptfd->pParamDesc[
j].custdata_list);
2515 recoffset + reclength - ((pFuncRec->
nrargs -
j - 1)
2521 ptfd->funcdesc.cScodes = 0 ;
2522 ptfd->funcdesc.lprgscode =
NULL ;
2526 recoffset += reclength;
2534 int infolen, nameoffset, reclength;
2546 ((cFuncs+cVars)*2+cFuncs + 1)*
sizeof(
INT));
2548 for(
i=0;
i<cVars;
i++, ++ptvd){
2551 offset + infolen + (2*cFuncs + cVars +
i + 1) *
sizeof(
INT));
2573 offset + infolen + (cFuncs +
i + 1) *
sizeof(
INT));
2577 &ptvd->
vardesc.elemdescVar.tdesc);
2579 if(pVarRec->
VarKind == VAR_CONST ){
2585 recoffset += reclength;
2617 switch(
info->tdescAlias->vt){
2625 info->typeattr.cbSizeInstance =
sizeof(
void*);
2626 info->typeattr.cbAlignment =
sizeof(
void*);
2631 &
info->typeattr.cbSizeInstance, &
info->typeattr.cbAlignment);
2635 info->typeattr.cbAlignment =
sizeof(
void *);
2638 if(
info->typeattr.cbSizeInstance <
sizeof(
void*))
2639 info->typeattr.cbAlignment =
info->typeattr.cbSizeInstance;
2641 info->typeattr.cbAlignment =
sizeof(
void*);
2647 info->typeattr.cbSizeInstance =
sizeof(
void*);
2648 info->typeattr.cbAlignment =
sizeof(
void*);
2721 if(ptiRet->
typeattr.cImplTypes >0 ) {
2762 INT16 len_str, len_piece;
2763 int offs = 0, lengthInChars;
2773 len_piece = len_str +
sizeof(
INT16);
2775 len_piece = (len_piece + 4) & ~0x3;
2779 string =
malloc(len_piece + 1);
2781 string[len_str] =
'\0';
2784 string, -1,
NULL, 0);
2785 if (!lengthInChars) {
2810 while (offs < pcx->pTblDir->pImpInfo.length) {
2824 ref->reference = offs;
2825 ref->pImpTLInfo = pImpLib;
2833 ERR(
"Cannot find a reference\n");
2834 ref->reference = -1;
2838 offs +=
sizeof(impinfo);
2855 0, 0, { (
DWORD_PTR)(__FILE__
": typelib loader cache") }
2880 IUnknown_AddRef(iface);
2899 if (
This->typelib_global)
2937 if (
This->typelib_resource)
2940 if (
This->typelib_global)
2944 if (
This->typelib_base)
2947 *ppBase =
This->typelib_base;
2948 *ppFile = &
This->IUnknown_iface;
2954 TRACE(
"No TYPELIB resource found\n");
2979 IUnknown_AddRef(iface);
3020 if (
sizeof(mzh) !=
LZRead( lzfd, (
LPSTR)&mzh,
sizeof(mzh) ) )
3026 if ( 2 !=
LZRead( lzfd, magic, 2 ) )
3031 if ( magic[0] ==
'N' && magic[1] ==
'E' )
3033 if ( magic[0] ==
'P' && magic[1] ==
'E' )
3037 WARN(
"Can't handle %s files.\n", magic );
3058 if (
sizeof(nehd) !=
LZRead( lzfd, (
LPSTR)&nehd,
sizeof(nehd) ) )
return FALSE;
3063 TRACE(
"No resources in NE dll\n" );
3068 resTab =
malloc( resTabSize );
3069 if ( !resTab )
return FALSE;
3072 if ( resTabSize !=
LZRead( lzfd, (
char*)resTab, resTabSize ) )
3086 if (!(typeInfo->
type_id & 0x8000))
3091 typeInfo = (
NE_TYPEINFO *)((
char *)(typeInfo + 1) +
3100 if (typeInfo->
type_id ==
id)
goto found_type;
3101 typeInfo = (
NE_TYPEINFO *)((
char *)(typeInfo + 1) +
3105 TRACE(
"No typeid entry found for %p\n",
typeid );
3117 BYTE *
p = resTab + nameInfo->
id;
3118 if (nameInfo->
id & 0x8000)
continue;
3126 if (nameInfo->
id ==
id)
goto found_name;
3128 TRACE(
"No resid entry found for %p\n",
typeid );
3134 if ( resLen ) *resLen = nameInfo->
length << *(
WORD *)resTab;
3135 if ( resOff ) *resOff = nameInfo->
offset << *(
WORD *)resTab;
3162 if( !
This->typelib_base )
3169 *ppBase =
This->typelib_base;
3171 *ppFile = &
This->IUnknown_iface;
3177 if( lzfd >= 0)
LZClose( lzfd );
3201 IUnknown_AddRef(iface);
3220 if (
This->typelib_base)
3259 if(
This->typelib_base)
3263 *ppBase =
This->typelib_base;
3264 *ppFile = &
This->IUnknown_iface;
3270 IUnknown_Release(&
This->IUnknown_iface);
3281#define SLTG_SIGNATURE 0x47544c53
3289 DWORD dwTLBLength = 0;
3296 if(index_str && *++index_str !=
'\0')
3300 if(*end_ptr ==
'\0')
3319 pszPath[
len] =
'\\';
3340 TRACE(
"cache hit\n");
3341 *ppTypeLib = &
entry->ITypeLib2_iface;
3342 ITypeLib2_AddRef(*ppTypeLib);
3358 if (dwTLBLength >= 4)
3367 FIXME(
"Header type magic %#lx not supported.\n", dwSignature);
3373 IUnknown_Release(
pFile);
3379 TRACE(
"adding to cache\n");
3409 if (!pTypeLibImpl)
return NULL;
3414 pTypeLibImpl->
ref = 1;
3424 return pTypeLibImpl;
3441 TRACE(
"%p, TLB length = %ld\n", pLib, dwTLBLength);
3444 if (!pTypeLibImpl)
return NULL;
3450 cx.pLibInfo = pTypeLibImpl;
3451 cx.length = dwTLBLength;
3458 FIXME(
"Header type magic 0x%08x not supported.\n",tlbHeader.
magic1);
3469 TRACE(
"read segment directory (at %ld)\n",lPSegDir);
3471 cx.pTblDir = &tlbSegDir;
3476 ERR(
"cannot find the table directory, ptr %#lx\n",lPSegDir);
3496 pTypeLibImpl->
lcid = tlbHeader.
lcid;
3564 pTypeLibImpl->
pTypeDesc[
i].lpadesc->tdescElem =
cx.pLibInfo->pTypeDesc[td[0]/(2*
sizeof(
INT))];
3566 pTypeLibImpl->
pTypeDesc[
i].lpadesc->cDims = td[2];
3568 for(
j = 0;
j<td[2];
j++)
3579 ERR(
"didn't find array description data\n");
3637 if (pTypeLibImpl->
ptr_size !=
sizeof(
void *))
3643 TRACE(
"(%p)\n", pTypeLibImpl);
3659 guid->Data4[0] =
s >> 8;
3660 guid->Data4[1] =
s & 0xff;
3663 for(
i = 0;
i < 6;
i++) {
3678 if(bytelen == 0xffff)
return 2;
3696 if(bytelen == 0xffff)
return 2;
3699 (*str)[bytelen] =
'\0';
3722 char *
ptr = pLibBlk;
3726 FIXME(
"libblk magic = %04x\n",
w);
3732 FIXME(
"LibBlk.res06 = %04x. Assuming string and skipping\n",
w);
3768 return ptr - (
char*)pLibBlk;
3779 HREFTYPE *typelib_ref)
3781 if(
table && typeinfo_ref < table->
num)
3783 *typelib_ref =
table->
refs[typeinfo_ref];
3797 if((*pType & 0xe00) == 0xe00) {
3799 pTD->lptdesc =
calloc(1,
sizeof(TYPEDESC));
3802 switch(*pType & 0x3f) {
3805 pTD->lptdesc =
calloc(1,
sizeof(TYPEDESC));
3824 pTD->lpadesc->cDims = pSA->
cDims;
3828 pTD = &pTD->lpadesc->tdescElem;
3839 pTD->lptdesc =
calloc(1,
sizeof(TYPEDESC));
3844 pTD->vt = *pType & 0x3f;
3857 if((*pType & 0xc000) == 0xc000)
3858 pElem->paramdesc.wParamFlags = PARAMFLAG_NONE;
3859 else if(*pType & 0x8000)
3860 pElem->paramdesc.wParamFlags = PARAMFLAG_FIN | PARAMFLAG_FOUT;
3861 else if(*pType & 0x4000)
3862 pElem->paramdesc.wParamFlags = PARAMFLAG_FOUT;
3864 pElem->paramdesc.wParamFlags = PARAMFLAG_FIN;
3867 pElem->paramdesc.wParamFlags |= PARAMFLAG_FLCID;
3870 pElem->paramdesc.wParamFlags |= PARAMFLAG_FRETVAL;
3872 return SLTG_DoType(pType, pBlk, &pElem->tdesc, ref_lookup);
3883 HREFTYPE typelib_ref;
3901 unsigned int lib_offs, type_num;
3906 if(
sscanf(refname,
"*\\R%x*#%x", &lib_offs, &type_num) != 2)
3908 if(lib_offs != 0xffff) {
3912 if(import->offset == lib_offs)
3920 import =
calloc(1,
sizeof(*
import));
3921 import->offset = lib_offs;
3924 if(
sscanf(pNameTable + lib_offs + 40,
"}#%hd.%hd#%lx#%s",
3925 &import->wVersionMajor,
3926 &import->wVersionMinor,
3927 &import->lcid, fname) != 4) {
3929 pNameTable + lib_offs + 40);
3932 if(fname[
len-1] !=
'#')
3933 FIXME(
"fname = %s\n", fname);
3934 fname[
len-1] =
'\0';
3948 ref_type->
index = type_num;
3977 if(
info->next == 0xffff)
3990 if(
info->next == 0xffff)
3993 FIXME_(
typelib)(
"Interface inheriting more than one interface\n");
4022 if (pItem->
name == 0xfffe)
4023 pVarDesc->
Name = prevName;
4031 if(pItem->
flags & 0x02)
4032 pType = &pItem->
type;
4034 pType = (
WORD*)(pBlk + pItem->
type);
4036 if (pItem->
flags & ~0xda)
4040 &pVarDesc->
vardesc.elemdescVar, ref_lookup);
4048 if (pItem->
flags & 0x40) {
4050 pVarDesc->
vardesc.varkind = VAR_DISPATCH;
4052 else if (pItem->
flags & 0x10) {
4054 pVarDesc->
vardesc.varkind = VAR_CONST;
4057 if (pItem->
flags & 0x08)
4060 switch (pVarDesc->
vardesc.elemdescVar.tdesc.vt)
4069 if (
len == 0xffff) {
4090 FIXME_(
typelib)(
"VAR_CONST unimplemented for type %d\n", pVarDesc->
vardesc.elemdescVar.tdesc.vt);
4097 pVarDesc->
vardesc.varkind = VAR_PERINSTANCE;
4103 if (pItem->
flags & 0x80)
4104 pVarDesc->
vardesc.wVarFlags |= VARFLAG_FREADONLY;
4106 prevName = pVarDesc->
Name;
4129 pFuncDesc->
funcdesc.funckind = FUNC_PUREVIRTUAL;
4132 pFuncDesc->
funcdesc.funckind = FUNC_DISPATCH;
4135 pFuncDesc->
funcdesc.funckind = FUNC_STATIC;
4148 if (pFuncDesc->
funcdesc.funckind == FUNC_DISPATCH)
4163 pFuncDesc->
funcdesc.lprgelemdescParam =
4170 char *paramName = pNameTable + *pArg;
4184 else if(*pArg == 0xfffe) {
4188 else if(paramName[-1] && !
isalnum(paramName[-1]))
4194 pType = (
WORD*)(pBlk + *pArg);
4208 pFuncDesc->
funcdesc.lprgelemdescParam[
param].paramdesc.wParamFlags |= PARAMFLAG_FOPT;
4212 paramName - pNameTable, pTI->
pTypeLib);
4390 char *pAfterOTIBlks =
NULL;
4391 char *pNameTable, *
ptr;
4396 TRACE_(
typelib)(
"%p, TLB length = %ld\n", pLib, dwTLBLength);
4400 if (!pTypeLibImpl)
return NULL;
4438 pFirstBlk = pPad9 + 1;
4445 pBlk = (
char*)pBlk + pBlkEntry[
order].
len;
4461 ptr = (
char*)pLibBlk +
len;
4473 memcpy(pOtherTypeInfoBlks[
i].index_name,
ptr + 4,
w);
4500 pAfterOTIBlks =
ptr;
4503 len = *(
DWORD*)(pAfterOTIBlks + 2);
4510 pNameTable = (
char*)pLibBlk +
len;
4512 switch(*(
WORD*)pNameTable) {
4523 pNameTable += 0x216;
4538 ppTypeInfoImpl = pTypeLibImpl->
typeinfos;
4540 for(pBlk = pFirstBlk,
order =
pHeader->first_blk - 1,
i = 0;
4548 if(
strcmp(pBlkEntry[
order].index_string + (
char*)pMagic, pOtherTypeInfoBlks[
i].index_name)) {
4550 free(pOtherTypeInfoBlks);
4557 free(pOtherTypeInfoBlks);
4560 TRACE_(
typelib)(
"pTIHeader->res06 = %lx, pTIHeader->res0e = %lx, "
4561 "pTIHeader->res16 = %lx, pTIHeader->res1e = %lx\n",
4565 (*ppTypeInfoImpl)->pTypeLib = pTypeLibImpl;
4566 (*ppTypeInfoImpl)->
index =
i;
4567 (*ppTypeInfoImpl)->Name =
SLTG_ReadName(pNameTable, pOtherTypeInfoBlks[
i].name_offs, pTypeLibImpl);
4568 (*ppTypeInfoImpl)->dwHelpContext = pOtherTypeInfoBlks[
i].
helpcontext;
4570 (*ppTypeInfoImpl)->typeattr.typekind = pTIHeader->
typekind;
4571 (*ppTypeInfoImpl)->typeattr.wMajorVerNum = pTIHeader->
major_version;
4572 (*ppTypeInfoImpl)->typeattr.wMinorVerNum = pTIHeader->
minor_version;
4573 (*ppTypeInfoImpl)->typeattr.wTypeFlags =
4576 if((*ppTypeInfoImpl)->typeattr.wTypeFlags & TYPEFLAG_FDUAL)
4584 TRACE_(
typelib)(
"TypeInfo %s of kind %s guid %s typeflags %04x\n",
4588 (*ppTypeInfoImpl)->typeattr.wTypeFlags);
4595 (*ppTypeInfoImpl)->typeattr.cbSizeInstance = pTITail->
cbSizeInstance;
4596 (*ppTypeInfoImpl)->typeattr.cbSizeVft = pTITail->
cbSizeVft;
4601 pTIHeader, pTITail);
4606 pTIHeader, pTITail);
4611 pTIHeader, pTITail);
4616 pTIHeader, pTITail);
4621 pTIHeader, pTITail);
4626 pTIHeader, pTITail);
4631 pTIHeader, pTITail);
4642#define X(x) TRACE_(typelib)("tt "#x": %x\n",pTITail->res##x);
4658 pBlk = (
char*)pBlk + pBlkEntry[
order].
len;
4662 FIXME(
"Somehow processed %d TypeInfos\n",
i);
4663 free(pOtherTypeInfoBlks);
4667 free(pOtherTypeInfoBlks);
4681 *
ppv = &
This->ITypeLib2_iface;
4686 *
ppv = &
This->ICreateTypeLib2_iface;
4691 TRACE(
"-- Interface: E_NOINTERFACE\n");
4704 TRACE(
"%p, refcount %lu.\n", iface,
ref);
4717 TRACE(
"%p, refcount %lu.\n", iface,
ref);
4724 TLBGuid *tlbguid, *tlbguid_next;
4730 TRACE(
"removing from cache list\n");
4731 if(
This->entry.next)
4735 TRACE(
" destroying ITypeLib(%p)\n",
This);
4756 for (
i = 0;
i <
This->ctTypeDesc;
i++)
4765 ITypeLib2_Release(&pImpLib->
pImpTypeLib->ITypeLib2_iface);
4778 for (
i = 0;
i <
This->TypeInfoCount; ++
i){
4798 return This->TypeInfoCount;
4821 ITypeInfo_AddRef(*ppTInfo);
4846 *pTKind =
This->typeinfos[
index]->typeattr.typekind;
4866 for(
i = 0;
i <
This->TypeInfoCount; ++
i){
4869 ITypeInfo_AddRef(*ppTInfo);
4896 (*attr)->lcid =
This->set_lcid;
4897 (*attr)->syskind =
This->syskind;
4898 (*attr)->wMajorVerNum =
This->ver_major;
4899 (*attr)->wMinorVerNum =
This->ver_minor;
4900 (*attr)->wLibFlags =
This->libflags;
4918 *ppTComp = &
This->ITypeComp_iface;
4919 ITypeComp_AddRef(*ppTComp);
4937 BSTR *pBstrDocString,
4938 DWORD *pdwHelpContext,
4939 BSTR *pBstrHelpFile)
4945 TRACE(
"(%p) index %d Name(%p) DocString(%p) HelpContext(%p) HelpFile(%p)\n",
4947 pBstrName, pBstrDocString,
4948 pdwHelpContext, pBstrHelpFile);
4965 if (
This->DocString)
4971 *pBstrDocString =
NULL;
4975 *pdwHelpContext =
This->dwHelpContext;
4985 *pBstrHelpFile =
NULL;
4997 result = ITypeInfo_GetDocumentation(pTInfo,
5001 pdwHelpContext, pBstrHelpFile);
5003 ITypeInfo_Release(pTInfo);
5031 TRACE(
"%p, %s, %#lx, %p.\n", iface,
debugstr_w(szNameBuf), lHashVal, pfName);
5034 for(tic = 0; tic <
This->TypeInfoCount; ++tic){
5036 if(!
TLB_str_memcmp(szNameBuf, pTInfo->
Name, nNameBufLen))
goto ITypeLib2_fnIsName_exit;
5037 for(fdc = 0; fdc < pTInfo->
typeattr.cFuncs; ++fdc) {
5040 if(!
TLB_str_memcmp(szNameBuf, pFInfo->
Name, nNameBufLen))
goto ITypeLib2_fnIsName_exit;
5041 for(pc=0; pc < pFInfo->
funcdesc.cParams; pc++){
5043 goto ITypeLib2_fnIsName_exit;
5046 for(vrc = 0; vrc < pTInfo->
typeattr.cVars; ++vrc){
5048 if(!
TLB_str_memcmp(szNameBuf, pVInfo->
Name, nNameBufLen))
goto ITypeLib2_fnIsName_exit;
5054ITypeLib2_fnIsName_exit:
5055 TRACE(
"(%p)slow! search for %s: %sfound!\n",
This,
5056 debugstr_w(szNameBuf), *pfName ?
"" :
"NOT ");
5080 TRACE(
"%p, %s %#lx, %p, %p, %p.\n", iface,
debugstr_w(
name),
hash, ppTInfo, memid, found);
5082 if ((!
name &&
hash == 0) || !ppTInfo || !memid || !found)
5086 for(tic = 0;
count < *found && tic <
This->TypeInfoCount; ++tic) {
5093 goto ITypeLib2_fnFindName_exit;
5096 for(fdc = 0; fdc < pTInfo->
typeattr.cFuncs; ++fdc) {
5101 goto ITypeLib2_fnFindName_exit;
5108 goto ITypeLib2_fnFindName_exit;
5112ITypeLib2_fnFindName_exit:
5131 TLIBATTR *pTLibAttr)
5170 ULONG *pcUniqueNames,
5171 ULONG *pcchUniqueNames)
5177 if(pcUniqueNames) *pcUniqueNames=1;
5178 if(pcchUniqueNames) *pcchUniqueNames=1;
5193 BSTR *pbstrHelpString,
5194 DWORD *pdwHelpStringContext,
5195 BSTR *pbstrHelpStringDll)
5201 FIXME(
"%p, %d, %#lx, partially implemented stub!\n", iface,
index,
lcid);
5212 if(pdwHelpStringContext)
5213 *pdwHelpStringContext=
This->dwHelpContext;
5214 if(pbstrHelpStringDll)
5222 result=ITypeLib2_GetTypeInfo(iface,
index, &pTInfo);
5227 result = ITypeInfo_QueryInterface(pTInfo,
5233 result = ITypeInfo2_GetDocumentation2(pTInfo2,
5237 pdwHelpStringContext,
5238 pbstrHelpStringDll);
5240 ITypeInfo2_Release(pTInfo2);
5243 ITypeInfo_Release(pTInfo);
5258 pCustData->prgCustData =
CoTaskMemAlloc(ct *
sizeof(CUSTDATAITEM));
5259 if(!pCustData->prgCustData)
5262 pCustData->cCustData = ct;
5264 cdi = pCustData->prgCustData;
5284 CUSTDATA *pCustData)
5291static const ITypeLib2Vtbl
tlbvt = {
5317 return ITypeLib2_QueryInterface(&
This->ITypeLib2_iface,
riid,
ppv);
5324 return ITypeLib2_AddRef(&
This->ITypeLib2_iface);
5331 return ITypeLib2_Release(&
This->ITypeLib2_iface);
5340 DESCKIND * pDescKind,
5347 TRACE(
"%p, %s, %#lx, %#x, %p, %p, %p.\n", iface,
debugstr_w(
szName), lHash,
wFlags, ppTInfo, pDescKind, pBindPtr);
5349 *pDescKind = DESCKIND_NONE;
5350 pBindPtr->lptcomp =
NULL;
5353 for(
i = 0;
i <
This->TypeInfoCount; ++
i){
5365 *pDescKind = DESCKIND_TYPECOMP;
5367 ITypeComp_AddRef(pBindPtr->lptcomp);
5379 hr = ITypeComp_Bind(pSubTypeComp,
szName, lHash,
wFlags, ppTInfo, pDescKind, pBindPtr);
5380 if (
SUCCEEDED(
hr) && (*pDescKind != DESCKIND_NONE))
5386 typemismatch =
TRUE;
5390 (pTypeInfo->
typeattr.wTypeFlags & TYPEFLAG_FAPPOBJECT))
5396 DESCKIND subdesckind;
5399 &subtypeinfo, &subdesckind, &subbindptr);
5400 if (
SUCCEEDED(
hr) && (subdesckind != DESCKIND_NONE))
5402 TYPEDESC tdesc_appobject;
5403 const VARDESC vardesc_appobject =
5424 tdesc_appobject.hreftype = pTypeInfo->
hreftype;
5431 switch (subdesckind)
5433 case DESCKIND_FUNCDESC:
5434 ITypeInfo_ReleaseFuncDesc(subtypeinfo, subbindptr.lpfuncdesc);
5436 case DESCKIND_VARDESC:
5437 ITypeInfo_ReleaseVarDesc(subtypeinfo, subbindptr.lpvardesc);
5442 if (subtypeinfo) ITypeInfo_Release(subtypeinfo);
5445 FIXME(
"no hreftype for interface %p\n", pTypeInfo);
5451 *pDescKind = DESCKIND_IMPLICITAPPOBJ;
5453 ITypeInfo_AddRef(*ppTInfo);
5457 typemismatch =
TRUE;
5485 if(!
szName || !ppTInfo || !ppTComp)
5496 ITypeInfo_AddRef(*ppTInfo);
5497 *ppTComp = &
info->ITypeComp_iface;
5498 ITypeComp_AddRef(*ppTComp);
5503static const ITypeCompVtbl
tlbtcvt =
5525 pTypeInfoImpl->
ref = 0;
5532 TRACE(
"(%p)\n", pTypeInfoImpl);
5533 return pTypeInfoImpl;
5551 *ppvObject = &
This->ITypeInfo2_iface;
5554 *ppvObject = &
This->ICreateTypeInfo2_iface;
5556 *ppvObject = &
This->ITypeComp_iface;
5559 IUnknown_AddRef((
IUnknown*)*ppvObject);
5560 TRACE(
"-- Interface: (%p)->(%p)\n",ppvObject,*ppvObject);
5563 TRACE(
"-- Interface: E_NOINTERFACE\n");
5572 TRACE(
"%p, refcount %lu.\n", iface,
ref);
5575 ITypeLib2_AddRef(&
This->pTypeLib->ITypeLib2_iface);
5584 for (
i = 0;
i <
func->funcdesc.cParams; ++
i)
5586 ELEMDESC *elemdesc = &
func->funcdesc.lprgelemdescParam[
i];
5587 if (elemdesc->paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
5588 VariantClear(&elemdesc->paramdesc.pparamdescex->varDefaultValue);
5591 free(
func->funcdesc.lprgelemdescParam);
5600 TRACE(
"destroying ITypeInfo(%p)\n",
This);
5602 for (
i = 0;
i <
This->typeattr.cFuncs; ++
i)
5608 for(
i = 0;
i <
This->typeattr.cVars; ++
i)
5613 }
else if (pVInfo->
vardesc.varkind == VAR_CONST) {
5621 if(
This->impltypes){
5622 for (
i = 0;
i <
This->typeattr.cImplTypes; ++
i){
5639 TRACE(
"%p, refcount %lu.\n", iface,
ref);
5643 BOOL not_attached_to_typelib =
This->not_attached_to_typelib;
5644 ITypeLib2_Release(&
This->pTypeLib->ITypeLib2_iface);
5645 if (not_attached_to_typelib)
5654 LPTYPEATTR *ppTypeAttr)
5661 size =
sizeof(**ppTypeAttr);
5669 **ppTypeAttr =
This->typeattr;
5672 if (
This->tdescAlias)
5677 (*ppTypeAttr)->cFuncs = (*ppTypeAttr)->cbSizeVft /
This->pTypeLib->ptr_size;
5679 (*ppTypeAttr)->cbSizeVft =
sizeof(IDispatchVtbl);
5680 (*ppTypeAttr)->wTypeFlags &= ~TYPEFLAG_FOLEAUTOMATION;
5698 *ppTComp = &
This->ITypeComp_iface;
5699 ITypeComp_AddRef(*ppTComp);
5706 if (elemdesc->paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
5707 size +=
sizeof(*elemdesc->paramdesc.pparamdescex);
5715 if (
src->paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
5717 const PARAMDESCEX *pparamdescex_src =
src->paramdesc.pparamdescex;
5718 PARAMDESCEX *pparamdescex_dest =
dest->paramdesc.pparamdescex = (PARAMDESCEX *)*
buffer;
5719 *
buffer +=
sizeof(PARAMDESCEX);
5720 *pparamdescex_dest = *pparamdescex_src;
5721 pparamdescex_dest->cBytes =
sizeof(PARAMDESCEX);
5723 return VariantCopy(&pparamdescex_dest->varDefaultValue,
5724 (
VARIANTARG *)&pparamdescex_src->varDefaultValue);
5727 dest->paramdesc.pparamdescex =
NULL;
5743 if (elemdesc->paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
5744 VariantClear(&elemdesc->paramdesc.pparamdescex->varDefaultValue);
5755 size +=
sizeof(*
src->lprgscode) *
src->cScodes;
5757 for (
i = 0;
i <
src->cParams;
i++)
5759 size +=
sizeof(ELEMDESC);
5768 dest->funckind = FUNC_DISPATCH;
5773 if (
dest->cScodes) {
5787 if (
dest->cParams) {
5788 dest->lprgelemdescParam = (ELEMDESC *)
buffer;
5789 buffer +=
sizeof(ELEMDESC) *
src->cParams;
5799 for (
i =
i - 1;
i >= 0;
i--)
5811 if (dispinterface && (
src->funckind != FUNC_DISPATCH))
5815 if (
dest->cParams &&
5816 (
dest->lprgelemdescParam[
dest->cParams - 1].paramdesc.wParamFlags & PARAMFLAG_FRETVAL))
5818 ELEMDESC *elemdesc = &
dest->lprgelemdescParam[
dest->cParams - 1];
5819 if (elemdesc->tdesc.vt !=
VT_PTR)
5821 ERR(
"elemdesc should have started with VT_PTR instead of:\n");
5830 dest->elemdescFunc.tdesc = *elemdesc->tdesc.lptdesc;
5842 if (
dest->cParams && (
dest->lprgelemdescParam[
dest->cParams - 1].paramdesc.wParamFlags & PARAMFLAG_FLCID))
5853 if (var_desc->varkind == VAR_CONST)
5865 UINT implemented_funcs = 0;
5877 hr = ITypeInfo_GetRefTypeInfo(iface,
This->impltypes[0].hRef, &pSubTypeInfo);
5884 &sub_funcs, hrefoffset);
5885 implemented_funcs += sub_funcs;
5886 ITypeInfo_Release(pSubTypeInfo);
5893 *
funcs = implemented_funcs +
This->typeattr.cFuncs;
5897 if (
index < implemented_funcs)
5899 index -= implemented_funcs;
5924 TYPEDESC *pTypeDesc = &pElemDesc->tdesc;
5927 switch (pTypeDesc->vt)
5930 pTypeDesc->hreftype += hrefoffset;
5934 pTypeDesc = pTypeDesc->lptdesc;
5937 pTypeDesc = &pTypeDesc->lpadesc->tdescElem;
5948 for (
i = 0;
i < pFuncDesc->cParams;
i++)
5960 LPFUNCDESC *ppFuncDesc)
5965 UINT hrefoffset = 0;
5972 if (
This->needs_layout)
5973 ICreateTypeInfo2_LayOut(&
This->ICreateTypeInfo2_iface);
5976 &internal_funcdesc, &hrefoffset);
5979 WARN(
"description for function %d not found\n",
index);
6003 if (
src->varkind == VAR_CONST)
6012 if (
src->lpstrSchema)
6021 if (
src->varkind == VAR_CONST)
6026 *
dest->lpvarValue = *
src->lpvarValue;
6039 if (
src->varkind == VAR_CONST)
6054 LPVARDESC *ppVarDesc)
6064 if (
This->needs_layout)
6065 ICreateTypeInfo2_LayOut(&
This->ICreateTypeInfo2_iface);
6086 if (!max_names || !func_desc->
Name)
6092 if (dispinterface && (func_desc->
funcdesc.funckind != FUNC_DISPATCH))
6095 if ((
params > 0) && (func_desc->
funcdesc.lprgelemdescParam[
params - 1].paramdesc.wParamFlags & PARAMFLAG_FRETVAL))
6097 if ((
params > 0) && (func_desc->
funcdesc.lprgelemdescParam[
params - 1].paramdesc.wParamFlags & PARAMFLAG_FLCID))
6119 if (
This->impltypes &&
6125 result = ITypeInfo_GetRefTypeInfo(iface,
This->impltypes[0].hRef, &
parent);
6129 ITypeInfo_Release(
parent);
6132 WARN(
"Could not search inherited interface!\n");
6136 WARN(
"no names found\n");
6155 TRACE(
"%p, %#lx, %p, %d, %p\n", iface, memid,
names, max_names, num_names);
6188 if (
This->typeattr.wTypeFlags & TYPEFLAG_FDUAL)
6200 *pRefType =
This->pTypeLib->dispatch_href;
6207 *pRefType =
This->impltypes[
index].hRef;
6216 TRACE(
"SUCCESS -- hRef %#lx.\n", *pRefType );
6218 TRACE(
"FAILURE -- hresult %#lx.\n",
hr);
6240 *pImplTypeFlags = 0;
6247 *pImplTypeFlags =
This->impltypes[
index].implflags;
6257 LPOLESTR *rgszNames,
UINT cNames, MEMBERID *pMemId)
6267 for (
i = 0;
i < cNames;
i++)
6270 for (fdc = 0; fdc <
This->typeattr.cFuncs; ++fdc) {
6274 if(cNames) *pMemId=pFDesc->
funcdesc.memid;
6275 for(
i=1;
i < cNames;
i++){
6279 if( j<pFDesc->funcdesc.cParams)
6291 *pMemId = pVDesc->
vardesc.memid;
6295 if(
This->impltypes) {
6298 ret = ITypeInfo2_GetRefTypeInfo(iface,
This->impltypes[0].hRef, &pTInfo);
6300 ret=ITypeInfo_GetIDsOfNames(pTInfo, rgszNames, cNames, pMemId );
6301 ITypeInfo_Release(pTInfo);
6304 WARN(
"Could not search inherited interface!\n");
6306 WARN(
"no names found\n");
6324 TRACE(
"(%p, %Id, %d, %d, %d, %p, %p, %p (vt=%d))\n",
6325 pvInstance, oVft,
cc, vtReturn, cActuals, prgvt, prgpvarg,
6326 pvargResult,
V_VT(pvargResult));
6330 FIXME(
"unsupported calling convention %d\n",
cc);
6343 else func = (
void *)oVft;
6352 WARN(
"invalid return type %u\n", vtReturn);
6359 for (
i = 0;
i < cActuals;
i++)
6378 argspos +=
sizeof(*arg) /
sizeof(
DWORD);
6424#elif defined(__x86_64__)
6437 TRACE(
"%p, %Id, %d, %d, %d, %p, %p, %p (vt=%d).\n",
6438 pvInstance, oVft,
cc, vtReturn, cActuals, prgvt, prgpvarg,
6439 pvargResult,
V_VT(pvargResult));
6443 FIXME(
"unsupported calling convention %d\n",
cc);
6456 else func = (
void *)oVft;
6465 WARN(
"invalid return type %u\n", vtReturn);
6472 for (
i = 0;
i < cActuals;
i++)
6495 V_R4(pvargResult) = call_double_method(
func, argspos,
args );
6499 V_R8(pvargResult) = call_double_method(
func, argspos,
args );
6503 call_method(
func, argspos,
args );
6515#elif defined(__arm__)
6518extern float CDECL call_float_method(
void *
func,
int nb_stk_args,
const DWORD *stk_args,
const DWORD *reg_args );
6519extern double CDECL call_double_method(
void *
func,
int nb_stk_args,
const DWORD *stk_args,
const DWORD *reg_args );
6539 TRACE(
"(%p, %Id, %d, %d, %d, %p, %p, %p (vt=%d))\n",
6540 pvInstance, oVft,
cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult,
V_VT(pvargResult));
6544 FIXME(
"unsupported calling convention %d\n",
cc);
6555 regs.r[rcount++] = (
DWORD)pvInstance;
6557 else func = (
void *)oVft;
6565 regs.r[rcount++] = (
DWORD)pvargResult;
6568 WARN(
"invalid return type %u\n", vtReturn);
6577 for (
i = 0;
i < cActuals;
i++)
6587 dcount =
max( (scount + 1) / 2, dcount );
6590 regs.sd.d[dcount++] =
V_R8(
arg);
6594 argspos += (argspos % 2);
6604 rcount += (rcount % 2);
6611 argspos += (argspos % 2);
6620 rcount += (rcount % 2);
6624 argspos += (argspos % 2);
6626 ntemp =
sizeof(*arg) /
sizeof(
DWORD);
6630 regs.r[rcount++] = *pdwarg++;
6632 args[argspos++] = *pdwarg++;
6637 if (!(scount % 2)) scount =
max( scount, dcount * 2 );
6639 regs.sd.s[scount++] =
V_R4(
arg);
6645 if (rcount < 4) regs.r[rcount++] =
V_I1(
arg);
6649 if (rcount < 4) regs.r[rcount++] =
V_UI1(
arg);
6653 if (rcount < 4) regs.r[rcount++] =
V_I2(
arg);
6657 if (rcount < 4) regs.r[rcount++] =
V_UI2(
arg);
6661 if (rcount < 4) regs.r[rcount++] =
V_BOOL(
arg);
6665 if (rcount < 4) regs.r[rcount++] =
V_UI4(
arg);
6672 argspos += (argspos % 2);
6702#elif defined(__aarch64__)
6727 TRACE(
"(%p, %Id, %d, %d, %d, %p, %p, %p (vt=%d))\n",
6732 FIXME(
"unsupported calling convention %d\n",
cc);
6757 if (fpcount < 8) regs.fp[fpcount++].f =
V_R4(
arg);
6762 if (fpcount < 8) regs.fp[fpcount++].d =
V_R8(
arg);
6782 if (rcount < 8) regs.x[rcount++] =
V_BOOL(
arg);
6786 if (rcount < 8) regs.x[rcount++] =
V_UI8(
arg);
6793 argspos += (argspos % 2);
6827 FIXME(
"(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d)): not implemented for this CPU\n",
6828 pvInstance, oVft,
cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult,
V_VT(pvargResult));
6838 TYPEATTR *tattr =
NULL;
6840 hr = ITypeInfo_GetRefTypeInfo(tinfo, tdesc->hreftype, &tinfo2);
6843 ERR(
"Could not get typeinfo of hreftype %lx for VT_USERDEFINED, hr %#lx.\n", tdesc->hreftype,
hr);
6846 hr = ITypeInfo_GetTypeAttr(tinfo2, &tattr);
6849 ERR(
"ITypeInfo_GetTypeAttr failed, hr %#lx.\n",
hr);
6850 ITypeInfo_Release(tinfo2);
6854 switch (tattr->typekind)
6865 if (tattr->wTypeFlags & TYPEFLAG_FDISPATCHABLE)
6880 FIXME(
"TKIND_RECORD unhandled.\n");
6885 FIXME(
"TKIND_UNION unhandled.\n");
6890 FIXME(
"TKIND %d unhandled.\n",tattr->typekind);
6894 ITypeInfo_ReleaseTypeAttr(tinfo2, tattr);
6895 ITypeInfo_Release(tinfo2);
6906 tdesc = tdesc->lptdesc;
6915 const TYPEDESC *tdesc_userdefined = tdesc;
6919 tdesc_userdefined = tdesc->lptdesc;
6926 *
vt |= vt_userdefined;
6946 ERR(
"cannot convert type %d into variant VT\n", tdesc->vt);
6973 hres = ITypeInfo_GetRefTypeInfo(tinfo, href, &tinfo2);
6977 hres = ITypeInfo_GetTypeAttr(tinfo2, &tattr);
6979 ITypeInfo_Release(tinfo2);
6983 switch(tattr->typekind) {
6990 *
guid = tattr->guid;
6994 for (
i = 0;
i < tattr->cImplTypes;
i++)
6996 ITypeInfo_GetImplTypeFlags(tinfo2,
i, &
flags);
6997 if (
flags & IMPLTYPEFLAG_FDEFAULT)
7001 if (
i == tattr->cImplTypes)
7004 hres = ITypeInfo_GetRefTypeOfImplType(tinfo2,
i, &href);
7010 ERR(
"Unexpected typekind %d\n", tattr->typekind);
7014 ITypeInfo_ReleaseTypeAttr(tinfo2, tattr);
7015 ITypeInfo_Release(tinfo2);
7021 return (
desc->wFuncFlags & FUNCFLAG_FRESTRICTED) && (
desc->memid >= 0);
7024#define INVBUF_ELEMENT_SIZE \
7025 (sizeof(VARIANTARG) + sizeof(VARIANTARG) + sizeof(VARIANTARG *) + sizeof(VARTYPE))
7026#define INVBUF_GET_ARG_ARRAY(buffer, params) (buffer)
7027#define INVBUF_GET_MISSING_ARG_ARRAY(buffer, params) \
7028 ((VARIANTARG *)((char *)(buffer) + sizeof(VARIANTARG) * (params)))
7029#define INVBUF_GET_ARG_PTR_ARRAY(buffer, params) \
7030 ((VARIANTARG **)((char *)(buffer) + (sizeof(VARIANTARG) + sizeof(VARIANTARG)) * (params)))
7031#define INVBUF_GET_ARG_TYPE_ARRAY(buffer, params) \
7032 ((VARTYPE *)((char *)(buffer) + (sizeof(VARIANTARG) + sizeof(VARIANTARG) + sizeof(VARIANTARG *)) * (params)))
7039 DISPPARAMS *pDispParams,
7041 EXCEPINFO *pExcepInfo,
7046 unsigned int var_index;
7052 TRACE(
"%p, %p, %ld, %#x, %p, %p, %p, %p.\n", iface, pIUnk, memid,
wFlags, pDispParams,
7053 pVarResult, pExcepInfo, pArgErr);
7055 if(
This->typeattr.wTypeFlags & TYPEFLAG_FRESTRICTED )
7060 ERR(
"NULL pDispParams not allowed\n");
7066 if (pDispParams->cNamedArgs > pDispParams->cArgs)
7068 ERR(
"named argument array cannot be bigger than argument array (%d/%d)\n",
7069 pDispParams->cNamedArgs, pDispParams->cArgs);
7075 for (fdc = 0; fdc <
This->typeattr.cFuncs; ++fdc){
7076 pFuncInfo = &
This->funcdescs[fdc];
7077 if ((memid == pFuncInfo->
funcdesc.memid) &&
7083 if (fdc < This->typeattr.cFuncs) {
7084 const FUNCDESC *func_desc = &pFuncInfo->
funcdesc;
7088 TRACE(
"invoking:\n");
7092 switch (func_desc->funckind) {
7093 case FUNC_PUREVIRTUAL:
7094 case FUNC_VIRTUAL: {
7102 UINT cNamedArgs = pDispParams->cNamedArgs;
7103 DISPID *rgdispidNamedArgs = pDispParams->rgdispidNamedArgs;
7104 UINT vargs_converted=0;
7109 if (func_desc->invkind & (INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF))
7111 if (!cNamedArgs || (rgdispidNamedArgs[0] != DISPID_PROPERTYPUT))
7113 ERR(
"first named arg for property put invocation must be DISPID_PROPERTYPUT\n");
7119 if (func_desc->cParamsOpt < 0 && cNamedArgs)
7121 ERR(
"functions with the vararg attribute do not support named arguments\n");
7126 for (
i = 0;
i < func_desc->cParams;
i++)
7128 TYPEDESC *tdesc = &func_desc->lprgelemdescParam[
i].tdesc;
7134 TRACE(
"changing args\n");
7135 for (
i = 0;
i < func_desc->cParams;
i++)
7137 USHORT wParamFlags = func_desc->lprgelemdescParam[
i].paramdesc.wParamFlags;
7138 TYPEDESC *tdesc = &func_desc->lprgelemdescParam[
i].tdesc;
7141 if (wParamFlags & PARAMFLAG_FLCID)
7143 prgpvarg[
i] = &rgvarg[
i];
7145 V_I4(prgpvarg[
i]) =
This->pTypeLib->lcid;
7151 for (
j = 0;
j < cNamedArgs;
j++)
7153 if (rgdispidNamedArgs[
j] ==
i || (
i == func_desc->cParams-1 && rgdispidNamedArgs[
j] == DISPID_PROPERTYPUT))
7155 src_arg = &pDispParams->rgvarg[
j];
7160 if (!src_arg && vargs_converted + cNamedArgs < pDispParams->cArgs)
7162 src_arg = &pDispParams->rgvarg[pDispParams->cArgs - 1 - vargs_converted];
7166 if (wParamFlags & PARAMFLAG_FRETVAL)
7173 if ((i < pDispParams->cArgs) &&
7174 ((func_desc->cParams != 1) || !pVarResult ||
7175 !(func_desc->invkind & INVOKE_PROPERTYGET)))
7184 if (
i == func_desc->cParams - 1)
7186 prgpvarg[
i] = &rgvarg[
i];
7188 V_VT(prgpvarg[
i]) = rgvt[
i];
7192 ERR(
"[retval] parameter must be the last parameter of the method (%d/%d)\n",
i, func_desc->cParams);
7197 else if (src_arg && !((wParamFlags & PARAMFLAG_FOPT) &&
7202 if(rgvt[
i]!=
V_VT(src_arg))
7208 if (rgvt[
i] ==
V_VT(src_arg))
7212 if (wParamFlags & PARAMFLAG_FIN)
7216 V_VT(&rgvarg[
i]) = rgvt[
i];
7227 ERR(
"SafeArrayCreate failed\n");
7233 ERR(
"SafeArrayAccessData failed with %#lx.\n",
hres);
7238 VariantCopy(&
v[
j], &pDispParams->rgvarg[pDispParams->cArgs - 1 -
i -
j]);
7242 ERR(
"SafeArrayUnaccessData failed with %#lx.\n",
hres);
7250 V_VT(&rgvarg[
i]) = rgvt[
i];
7254 if (wParamFlags & PARAMFLAG_FIN)
7257 V_VT(&missing_arg[
i]) = rgvt[
i] & ~VT_BYREF;
7259 V_VT(&rgvarg[
i]) = rgvt[
i];
7264 V_VT(&rgvarg[
i]) = rgvt[
i];
7272 V_VT(&rgvarg[
i]) = rgvt[
i];
7277 ERR(
"failed to convert param %d to %s from %s\n",
i,
7281 prgpvarg[
i] = &rgvarg[
i];
7285 prgpvarg[
i] = src_arg;
7295 tdesc = tdesc->lptdesc;
7301 hres = IUnknown_QueryInterface(
V_UNKNOWN(prgpvarg[
i]), &
guid, (
void**)&userdefined_iface);
7311 else if (wParamFlags & PARAMFLAG_FOPT)
7314 arg = prgpvarg[
i] = &rgvarg[
i];
7315 if (wParamFlags & PARAMFLAG_FHASDEFAULT)
7317 hres =
VariantCopy(
arg, &func_desc->lprgelemdescParam[
i].paramdesc.pparamdescex->varDefaultValue);
7349 V_VT(&rgvarg[
i]) = rgvt[
i];
7350 prgpvarg[
i] = &rgvarg[
i];
7362 if (func_desc->elemdescFunc.tdesc.vt ==
VT_VOID)
7366 V_VT(&varresult) = 0;
7372 V_VT(&varresult), func_desc->cParams, rgvt,
7373 prgpvarg, &varresult);
7375 vargs_converted = 0;
7377 for (
i = 0;
i < func_desc->cParams;
i++)
7379 USHORT wParamFlags = func_desc->lprgelemdescParam[
i].paramdesc.wParamFlags;
7381 if (wParamFlags & PARAMFLAG_FLCID)
7383 else if (wParamFlags & PARAMFLAG_FRETVAL)
7396 else if (vargs_converted < pDispParams->cArgs)
7398 VARIANTARG *
arg = &pDispParams->rgvarg[pDispParams->cArgs - 1 - vargs_converted];
7399 if (wParamFlags & PARAMFLAG_FOUT)
7407 ERR(
"failed to convert param %d to vt %d\n",
i,
7408 V_VT(&pDispParams->rgvarg[pDispParams->cArgs - 1 - vargs_converted]));
7414 func_desc->cParamsOpt < 0 &&
7415 i == func_desc->cParams-1)
7423 ERR(
"SafeArrayGetUBound failed with %#lx.\n",
hres);
7429 ERR(
"SafeArrayAccessData failed with %#lx.\n",
hres);
7432 for (
j = 0;
j <= ubound;
j++)
7437 ERR(
"SafeArrayUnaccessData failed with %#lx.\n",
hres);
7444 else if (wParamFlags & PARAMFLAG_FOPT)
7446 if (wParamFlags & PARAMFLAG_FHASDEFAULT)
7455 WARN(
"invoked function failed with error %#lx.\n",
V_ERROR(&varresult));
7460 pExcepInfo->scode =
V_ERROR(&varresult);
7463 IErrorInfo_GetDescription(pErrorInfo, &pExcepInfo->bstrDescription);
7464 IErrorInfo_GetHelpFile(pErrorInfo, &pExcepInfo->bstrHelpFile);
7465 IErrorInfo_GetSource(pErrorInfo, &pExcepInfo->bstrSource);
7466 IErrorInfo_GetHelpContext(pErrorInfo, &pExcepInfo->dwHelpContext);
7468 IErrorInfo_Release(pErrorInfo);
7479 *pVarResult = varresult;
7485 if (
SUCCEEDED(
hres) && pVarResult && (func_desc->cParams == 1) &&
7486 (func_desc->invkind & INVOKE_PROPERTYGET) &&
7487 (func_desc->lprgelemdescParam[0].paramdesc.wParamFlags & PARAMFLAG_FRETVAL) &&
7488 (pDispParams->cArgs != 0))
7496 hres = IDispatch_Invoke(pDispatch, DISPID_VALUE, &
IID_NULL,
7498 pDispParams, pVarResult, pExcepInfo, pArgErr);
7499 IDispatch_Release(pDispatch);
7512 case FUNC_DISPATCH: {
7517 FIXME(
"Calling Invoke in IDispatch iface. untested!\n");
7518 hres = IDispatch_Invoke(
7520 pVarResult,pExcepInfo,pArgErr
7523 FIXME(
"IDispatch::Invoke failed with %#lx. (Could be not a real error?)\n",
hres);
7524 IDispatch_Release(disp);
7526 FIXME(
"FUNC_DISPATCH used on object without IDispatch iface?\n");
7530 FIXME(
"Unknown function invocation type %d\n", func_desc->funckind);
7538 }
else if(
SUCCEEDED(
hres = ITypeInfo2_GetVarIndexOfMemId(iface, memid, &var_index))) {
7541 hres = ITypeInfo2_GetVarDesc(iface, var_index, &var_desc);
7544 FIXME(
"varseek: Found memid, but variable-based invoking not supported\n");
7546 ITypeInfo2_ReleaseVarDesc(iface, var_desc);
7551 for (fdc = 0; fdc <
This->typeattr.cFuncs; ++fdc)
7553 const FUNCDESC *func_desc = &
This->funcdescs[fdc].funcdesc;
7554 if (memid == func_desc->memid)
7556 if ((
wFlags & INVOKE_PROPERTYPUT) && (func_desc->invkind & INVOKE_PROPERTYGET))
7558 int count_inputs = 0;
7559 for (
i = 0;
i < func_desc->cParams;
i++)
7561 USHORT wParamFlags = func_desc->lprgelemdescParam[
i].paramdesc.wParamFlags;
7562 if (!(wParamFlags & PARAMFLAG_FRETVAL))
7566 if (count_inputs == 0 || pDispParams->cArgs == count_inputs + 1)
7573 ITypeInfo2_GetTypeKind(iface, &
type_kind);
7575 if(
This->impltypes) {
7578 hres = ITypeInfo2_GetRefTypeInfo(iface,
This->impltypes[0].hRef, &pTInfo);
7580 hres = ITypeInfo_Invoke(pTInfo,pIUnk,memid,
wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr);
7581 ITypeInfo_Release(pTInfo);
7584 WARN(
"Could not search inherited interface!\n");
7587 WARN(
"did not find member id %ld, flags 0x%x!\n", memid,
wFlags);
7599 MEMBERID memid,
BSTR *pBstrName,
BSTR *pBstrDocString,
7600 DWORD *pdwHelpContext,
BSTR *pBstrHelpFile)
7605 TRACE(
"%p, %ld, %p, %p, %p, %p.\n",
7606 iface, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile);
7613 *pdwHelpContext=
This->dwHelpContext;
7644 if(
This->impltypes &&
7649 result = ITypeInfo2_GetRefTypeInfo(iface,
This->impltypes[0].hRef, &pTInfo);
7651 result = ITypeInfo_GetDocumentation(pTInfo, memid, pBstrName,
7652 pBstrDocString, pdwHelpContext, pBstrHelpFile);
7653 ITypeInfo_Release(pTInfo);
7656 WARN(
"Could not search inherited interface!\n");
7659 WARN(
"member %ld not found\n", memid);
7669 INVOKEKIND invKind,
BSTR *pBstrDllName,
BSTR *pBstrName,
7675 TRACE(
"%p, %#lx, %d, %p, %p, %p.\n", iface, memid, invKind, pBstrDllName, pBstrName, pwOrdinal);
7677 if (pBstrDllName) *pBstrDllName =
NULL;
7678 if (pBstrName) *pBstrName =
NULL;
7679 if (pwOrdinal) *pwOrdinal = 0;
7695 if (pwOrdinal) *pwOrdinal = -1;
7699 if (pBstrName) *pBstrName =
NULL;
7700 if (pwOrdinal) *pwOrdinal =
LOWORD(pFDesc->
Entry);
7708 HREFTYPE *hRefType,
ITypeInfo **ppTInfo)
7713 TRACE(
"%p, %#lx.\n", iface, *hRefType);
7719 hr = ITypeInfo_GetRefTypeInfo(iface,
This->impltypes[0].hRef, &pSubTypeInfo);
7725 ITypeInfo_Release(pSubTypeInfo);
7732 return ITypeInfo_GetRefTypeInfo(iface, *hRefType, ppTInfo);
7756 if ((
INT)hRefType < 0) {
7759 if (!(
This->typeattr.wTypeFlags & TYPEFLAG_FDUAL) ||
7769 *pTypeInfoImpl = *
This;
7770 pTypeInfoImpl->
ref = 0;
7784 ITypeInfo_AddRef(*ppTInfo);
7786 TRACE(
"got dual interface %p\n", *ppTInfo);
7793 if(!(hRefType & 0x1))
7795 for(
i = 0;
i <
This->pTypeLib->TypeInfoCount; ++
i)
7797 if (
This->pTypeLib->typeinfos[
i]->hreftype == (hRefType&(~0x3)))
7813 if(ref_type->
reference == (hRefType & (~0x3)))
7816 if(&ref_type->
entry == &
This->pTypeLib->ref_list)
7818 FIXME(
"Can't find pRefType for ref %lx\n", hRefType);
7824 TRACE(
"internal reference\n");
7825 result = ITypeInfo2_GetContainingTypeLib(iface, &pTLib, &
Index);
7828 TRACE(
"typeinfo in imported typelib that is already loaded\n");
7830 ITypeLib_AddRef(pTLib);
7847 ITypeLib_AddRef(pTLib);
7862 This->pTypeLib->syskind,
7873 ITypeLib_AddRef(pTLib);
7884 ITypeLib_Release(pTLib);
7887 WARN(
"(%p) failed hreftype %#lx.\n", iface, hRefType);
7896 TRACE(
"%p, hreftype %#lx, loaded %s (%p)\n", iface, hRefType,
7907 MEMBERID memid, INVOKEKIND invKind,
PVOID *
ppv)
7914 TRACE(
"%p, %lx, %#x, %p.\n", iface, memid, invKind,
ppv);
7916 hr = ITypeInfo2_GetDllEntry(iface, memid, invKind, &dll, &
entry, &ordinal);
7947 ERR(
"function not found %d\n", ordinal);
7977 WARN(
"Not able to aggregate\n");
7981 hr = ITypeInfo2_GetTypeAttr(iface, &pTA);
7986 WARN(
"CreateInstance on typeinfo of type %x\n", pTA->typekind);
7992 if(pTA->wTypeFlags & TYPEFLAG_FAPPOBJECT)
7996 TRACE(
"GetActiveObject rets %#lx.\n",
hr);
7999 hr = IUnknown_QueryInterface(
pUnk,
riid, ppvObj);
8000 IUnknown_Release(
pUnk);
8006 CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
8010 ITypeInfo2_ReleaseTypeAttr(iface, pTA);
8020 FIXME(
"%p, %ld stub!\n", iface, memid);
8042 *ppTLib = (
ITypeLib *)&
This->pTypeLib->ITypeLib2_iface;
8043 ITypeLib_AddRef(*ppTLib);
8044 TRACE(
"returning ppTLib=%p\n", *ppTLib);
8056 TYPEATTR* pTypeAttr)
8069 FUNCDESC *pFuncDesc)
8076 for (
i = 0;
i < pFuncDesc->cParams;
i++)
8102 TYPEKIND *pTypeKind)
8105 *pTypeKind =
This->typeattr.typekind;
8106 TRACE(
"(%p) type 0x%0x\n",
This,*pTypeKind);
8120 TRACE(
"%p, %p.\n", iface, pTypeFlags);
8121 *pTypeFlags=
This->typeattr.wTypeFlags;
8131 MEMBERID memid, INVOKEKIND invKind,
UINT *pFuncIndex)
8137 for (fdc = 0; fdc <
This->typeattr.cFuncs; ++fdc){
8139 if(memid == pFuncInfo->
funcdesc.memid && (invKind & pFuncInfo->
funcdesc.invkind))
8142 if(fdc < This->typeattr.cFuncs) {
8148 TRACE(
"%p, %#lx, %#x, hr %#lx.\n", iface, memid, invKind,
result);
8159 MEMBERID memid,
UINT *pVarIndex)
8164 TRACE(
"%p, %ld, %p.\n", iface, memid, pVarIndex);
8170 *pVarIndex = (pVarInfo -
This->vardescs);
8189 if(!
guid || !pVarVal)
8223 WARN(
"description for function %d not found\n",
index);
8249 TRACE(
"%p %u %u %s %p\n",
This, indexFunc, indexParam,
8256 if(indexParam >= pFDesc->
funcdesc.cParams)
8338 BSTR *pbstrHelpString,
8339 DWORD *pdwHelpStringContext,
8340 BSTR *pbstrHelpStringDll)
8345 TRACE(
"%p, %ld, %#lx, %p, %p, %p.\n",
8346 iface, memid,
lcid, pbstrHelpString, pdwHelpStringContext,
8347 pbstrHelpStringDll );
8355 if(pdwHelpStringContext)
8356 *pdwHelpStringContext=
This->dwHelpStringContext;
8357 if(pbstrHelpStringDll)
8358 *pbstrHelpStringDll=
8366 if(pdwHelpStringContext)
8368 if(pbstrHelpStringDll)
8369 *pbstrHelpStringDll=
8377 if(pdwHelpStringContext)
8379 if(pbstrHelpStringDll)
8380 *pbstrHelpStringDll=
8395 CUSTDATA *pCustData)
8412 CUSTDATA *pCustData)
8434 UINT indexFunc,
UINT indexParam, CUSTDATA *pCustData)
8441 TRACE(
"%p %u %u %p\n",
This, indexFunc, indexParam, pCustData);
8447 if(indexParam >= pFDesc->
funcdesc.cParams)
8480 CUSTDATA *pCustData)
8493static const ITypeInfo2Vtbl
tinfvt =
8564 if (!pTypeLibImpl)
return E_FAIL;
8571 pTIIface->
index = 0;
8577 pTIIface->
typeattr.wMajorVerNum = 0;
8578 pTIIface->
typeattr.wMinorVerNum = 0;
8579 pTIIface->
typeattr.cbAlignment = 2;
8580 pTIIface->
typeattr.cbSizeInstance = -1;
8595 pFuncDesc->
funcdesc.funckind = FUNC_VIRTUAL;
8599 pFuncDesc->
funcdesc.cParamsOpt = 0;
8600 pFuncDesc->
funcdesc.oVft =
md->iMeth *
sizeof(
void *);
8602 pFuncDesc->
funcdesc.wFuncFlags = 0;
8603 pFuncDesc->
funcdesc.elemdescFunc.tdesc.vt =
md->vtReturn;
8604 pFuncDesc->
funcdesc.elemdescFunc.paramdesc.wParamFlags = PARAMFLAG_NONE;
8605 pFuncDesc->
funcdesc.elemdescFunc.paramdesc.pparamdescex =
NULL;
8606 pFuncDesc->
funcdesc.lprgelemdescParam =
calloc(
md->cArgs,
sizeof(ELEMDESC));
8625 pTIClass->
index = 1;
8631 pTIClass->
typeattr.wMajorVerNum = 0;
8632 pTIClass->
typeattr.wMinorVerNum = 0;
8633 pTIClass->
typeattr.cbAlignment = 2;
8634 pTIClass->
typeattr.cbSizeInstance = -1;
8652 ITypeInfo_AddRef(*pptinfo);
8663 return ITypeInfo2_QueryInterface(&
This->ITypeInfo2_iface,
riid,
ppv);
8670 return ITypeInfo2_AddRef(&
This->ITypeInfo2_iface);
8677 return ITypeInfo2_Release(&
This->ITypeInfo2_iface);
8686 DESCKIND * pDescKind,
8695 TRACE(
"%p, %s, %#lx, 0x%x, %p, %p, %p.\n", iface,
debugstr_w(
szName), lHash,
wFlags, ppTInfo, pDescKind, pBindPtr);
8697 *pDescKind = DESCKIND_NONE;
8698 pBindPtr->lpfuncdesc =
NULL;
8701 for(fdc = 0; fdc <
This->typeattr.cFuncs; ++fdc){
8702 pFDesc = &
This->funcdescs[fdc];
8712 if (fdc < This->typeattr.cFuncs)
8716 &pBindPtr->lpfuncdesc,
8720 *pDescKind = DESCKIND_FUNCDESC;
8722 ITypeInfo_AddRef(*ppTInfo);
8730 *pDescKind = DESCKIND_VARDESC;
8732 ITypeInfo_AddRef(*ppTInfo);
8742 hr=ITypeInfo2_GetRefTypeInfo(&
This->ITypeInfo2_iface,
This->impltypes[0].hRef, &pTInfo);
8745 hr = ITypeInfo_GetTypeComp(pTInfo,&pTComp);
8746 ITypeInfo_Release(pTInfo);
8750 hr = ITypeComp_Bind(pTComp,
szName, lHash,
wFlags, ppTInfo, pDescKind, pBindPtr);
8751 ITypeComp_Release(pTComp);
8752 if (
SUCCEEDED(
hr) && *pDescKind == DESCKIND_FUNCDESC &&
8755 FUNCDESC *tmp = pBindPtr->lpfuncdesc;
8761 WARN(
"Could not search inherited interface!\n");
8781 if (!ppTInfo || !ppTComp)
8790static const ITypeCompVtbl
tcompvt =
8816 This->syskind = syskind;
8821 ITypeLib2_Release(&
This->ITypeLib2_iface);
8825 hres = ITypeLib2_QueryInterface(&
This->ITypeLib2_iface, &IID_ICreateTypeLib2, (
LPVOID*)ppctlib);
8826 ITypeLib2_Release(&
This->ITypeLib2_iface);
8835 return ITypeLib2_QueryInterface(&
This->ITypeLib2_iface,
riid,
object);
8842 return ITypeLib2_AddRef(&
This->ITypeLib2_iface);
8849 return ITypeLib2_Release(&
This->ITypeLib2_iface);
8861 if (!ctinfo || !
name)
8875 info->typeattr.typekind = kind;
8876 info->typeattr.cbAlignment = 4;
8878 switch (
info->typeattr.typekind) {
8883 info->typeattr.cbSizeInstance =
This->ptr_size;
8887 info->typeattr.cbSizeInstance = 0;
8890 info->typeattr.cbSizeInstance = 2;
8893 info->typeattr.cbSizeInstance = -0x75;
8896 FIXME(
"unrecognized typekind %d\n",
info->typeattr.typekind);
8897 info->typeattr.cbSizeInstance = 0xdeadbeef;
8901 hres = ITypeInfo2_QueryInterface(&
info->ITypeInfo2_iface,
8902 &IID_ICreateTypeInfo, (
void **)ctinfo);
8904 ITypeInfo2_Release(&
info->ITypeInfo2_iface);
8910 ++
This->TypeInfoCount;
8931 WORD majorVerNum,
WORD minorVerNum)
8935 TRACE(
"%p %d %d\n",
This, majorVerNum, minorVerNum);
8937 This->ver_major = majorVerNum;
8938 This->ver_minor = minorVerNum;
8971 LPOLESTR helpFileName)
8990 TRACE(
"%p, %ld.\n", iface, helpContext);
8992 This->dwHelpContext = helpContext;
9016 This->libflags = libFlags;
9052 file->string_seg.len = 0;
9093 str->offset = last_offs;
9108 file->header.nametablecount = 0;
9109 file->header.nametablechars = 0;
9111 file->name_seg.len = 0;
9116 file->header.nametablechars +=
size;
9117 file->header.nametablecount++;
9170 str->offset = last_offs;
9184 for (
i = 0;
i < 8;
i ++)
9195 int hash_key, *guidhashtab;
9202 guidhashtab =
file->guidhash_seg.data;
9208 entry->next_hash = guidhashtab[hash_key];
9209 guidhashtab[hash_key] = offs;
9211 guid->offset = offs;
9236 ERR(
"VariantChangeType failed: %#lx.\n",
hres);
9246 if(
V_UI4(&
v) > 0x3ffffff)
9274 if(
file->custdata_seg.data){
9275 file->custdata_seg.data =
realloc(
file->custdata_seg.data,
file->custdata_seg.len +
sizeof(
int) * 2);
9276 data = (
int *)(((
char *)
file->custdata_seg.data) +
file->custdata_seg.len);
9277 file->custdata_seg.len +=
sizeof(
int) * 2;
9279 file->custdata_seg.len =
sizeof(
int) * 2;
9293 int i,
len = (6 + mb_len + 3) & ~0x3;
9296 if(
file->custdata_seg.data){
9298 data = ((
char *)
file->custdata_seg.data) +
file->custdata_seg.len;
9299 file->custdata_seg.len +=
len;
9306 *((
unsigned int *)(
data+2)) = mb_len;
9308 for (
i = 6 + mb_len;
i <
len;
i++)
9316 FIXME(
"Argument type not yet handled\n");
9333 file->arraydesc_seg.len += (2 +
desc->cDims * 2) *
sizeof(
DWORD);
9335 encoded = (
DWORD*)((
char *)
file->arraydesc_seg.data + offs);
9338 encoded[1] =
desc->cDims | ((
desc->cDims * 2 *
sizeof(
DWORD)) << 16);
9339 for(
i = 0;
i <
desc->cDims; ++
i){
9340 encoded[2 +
i * 2] =
desc->rgbounds[
i].cElements;
9341 encoded[2 +
i * 2 + 1] =
desc->rgbounds[
i].lLbound;
9373 encoded[0] =
desc->vt | (0x7FFE << 16);
9377 encoded[0] =
desc->vt | (0x7FFF << 16);
9378 encoded[1] =
desc->hreftype;
9381 TRACE(
"Mixing in-place, VT: 0x%x\n",
desc->vt);
9399 return 0x80000000 | (subtype << 16) |
desc->vt;
9403 while(offs < file->typdesc_seg.len){
9404 if(!
memcmp(&
data[offs], encoded,
sizeof(encoded)))
9406 offs +=
sizeof(encoded);
9409 file->typdesc_seg.len +=
sizeof(encoded);
9412 memcpy(&
data[offs], encoded,
sizeof(encoded));
9435 cdguid->
next = offs;
9450 DWORD ret = aux_seg->
len,
i,
j, recorded_size = 0, extra_size = 0;
9456 for(
i = 0;
i <
info->typeattr.cFuncs; ++
i){
9459 recorded_size += 6 *
sizeof(
INT);
9464 recorded_size += 7 *
sizeof(
INT);
9465 else if(
desc->HelpStringContext != 0)
9466 recorded_size += 6 *
sizeof(
INT);
9468 else if(
desc->Entry)
9469 recorded_size += 3 *
sizeof(
INT);
9470 else if(
desc->HelpString)
9471 recorded_size += 2 *
sizeof(
INT);
9472 else if(
desc->helpcontext)
9473 recorded_size +=
sizeof(
INT);
9477 for(
j = 0;
j <
desc->funcdesc.cParams; ++
j){
9478 if(
desc->funcdesc.lprgelemdescParam[
j].paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT){
9479 recorded_size +=
desc->funcdesc.cParams *
sizeof(
INT);
9484 extra_size += 2 *
sizeof(
INT);
9487 for(
i = 0;
i <
info->typeattr.cVars; ++
i){
9490 recorded_size += 5 *
sizeof(
INT);
9493 if(
desc->HelpStringContext != 0)
9494 recorded_size += 5 *
sizeof(
INT);
9496 recorded_size += 4 *
sizeof(
INT);
9498 else if(
desc->HelpString)
9499 recorded_size += 2 *
sizeof(
INT);
9500 else if(
desc->HelpContext != 0)
9501 recorded_size +=
sizeof(
INT);
9503 extra_size += 2 *
sizeof(
INT);
9506 if(!recorded_size && !extra_size)
9509 extra_size +=
sizeof(
INT);
9511 aux_seg->
len += recorded_size + extra_size;
9513 aux_seg->
len +=
sizeof(
INT) * (
info->typeattr.cVars +
info->typeattr.cFuncs);
9517 *((
DWORD*)((
char *)aux_seg->
data +
ret)) = recorded_size;
9523 for(
i = 0;
i <
info->typeattr.cFuncs; ++
i){
9525 DWORD size = 6 *
sizeof(
INT), paramdefault_size = 0, *paramdefault;
9529 funcrecord->
Flags =
desc->funcdesc.wFuncFlags;
9542 desc->funcdesc.funckind |
9543 (
desc->funcdesc.invkind << 3) |
9545 (
desc->funcdesc.callconv << 8);
9548 funcrecord->
FKCCIC |= 0x2000;
9550 for(
j = 0; j < desc->funcdesc.cParams; ++
j){
9551 if(
desc->funcdesc.lprgelemdescParam[
j].paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT){
9552 paramdefault_size =
sizeof(
INT) *
desc->funcdesc.cParams;
9556 if(paramdefault_size > 0)
9557 funcrecord->
FKCCIC |= 0x1000;
9567 if(
desc->HelpString)
9577 funcrecord->
res9 = -1;
9578 funcrecord->
resA = -1;
9581 }
else if(
desc->HelpStringContext != 0){
9584 if(
desc->HelpString)
9594 funcrecord->
res9 = -1;
9595 funcrecord->
resA = -1;
9597 }
else if(
desc->Entry){
9600 if(
desc->HelpString)
9610 }
else if(
desc->HelpString){
9614 }
else if(
desc->helpcontext){
9619 paramdefault = (
DWORD*)((
char *)funcrecord +
size);
9620 size += paramdefault_size;
9622 for(
j = 0;
j <
desc->funcdesc.cParams; ++
j){
9630 info->Flags =
desc->funcdesc.lprgelemdescParam[
j].paramdesc.wParamFlags;
9632 if(paramdefault_size){
9633 if(
desc->funcdesc.lprgelemdescParam[
j].paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
9635 else if(paramdefault_size)
9653 for(
i = 0;
i <
info->typeattr.cVars; ++
i){
9659 varrecord->
Flags =
desc->vardesc.wVarFlags;
9662 if(
desc->vardesc.varkind == VAR_CONST){
9669 if(
desc->HelpStringContext != 0){
9672 if(
desc->HelpString)
9676 varrecord->
res9 = -1;
9682 if(
desc->HelpString)
9686 varrecord->
res9 = -1;
9688 }
else if(
desc->HelpString){
9691 if(
desc->HelpString)
9695 }
else if(
desc->HelpContext != 0){
9709 memid = (MEMBERID*)varrecord;
9710 for(
i = 0;
i <
info->typeattr.cFuncs; ++
i){
9712 *memid =
desc->funcdesc.memid;
9715 for(
i = 0;
i <
info->typeattr.cVars; ++
i){
9717 *memid =
desc->vardesc.memid;
9722 for(
i = 0;
i <
info->typeattr.cFuncs; ++
i){
9730 for(
i = 0;
i <
info->typeattr.cVars; ++
i){
9759 for(
i = 0;
i <
info->typeattr.cImplTypes; ++
i){
9763 if(i < info->typeattr.cImplTypes - 1)
9781 if(
info->typeattr.wTypeFlags & TYPEFLAG_FDUAL)
9784 base->typekind =
info->typeattr.typekind;
9786 base->typekind |= (
info->typeattr.cbAlignment << 11) | (
info->typeattr.cbAlignment << 6);
9792 base->cElement = (
info->typeattr.cVars << 16) |
info->typeattr.cFuncs;
9798 base->posguid =
info->guid->offset;
9801 base->flags =
info->typeattr.wTypeFlags;
9803 base->NameOffset =
info->Name->offset;
9805 ((
unsigned char*)
file->name_seg.data)[
info->Name->offset+9] = 0x38;
9806 *(HREFTYPE*)((
unsigned char*)
file->name_seg.data+
info->Name->offset) =
info->hreftype;
9808 base->NameOffset = -1;
9810 base->version = (
info->typeattr.wMinorVerNum << 16) |
info->typeattr.wMajorVerNum;
9812 base->docstringoffs =
info->DocString->offset;
9814 base->docstringoffs = -1;
9815 base->helpstringcontext =
info->dwHelpStringContext;
9816 base->helpcontext =
info->dwHelpContext;
9818 base->cImplTypes =
info->typeattr.cImplTypes;
9819 base->cbSizeVft =
info->typeattr.cbSizeVft;
9820 base->size =
info->typeattr.cbSizeInstance;
9827 base->datatype1 =
info->DllName->offset;
9829 base->datatype1 = -1;
9831 if(
info->typeattr.cImplTypes > 0)
9832 base->datatype1 =
info->impltypes[0].hRef;
9834 base->datatype1 = -1;
9848 file->typeinfo_seg.len = 0;
9849 for(
i = 0;
i <
This->TypeInfoCount; ++
i){
9859 file->aux_seg.len = 0;
9862 file->typeinfo_seg.len = 0;
9863 for(
i = 0;
i <
This->TypeInfoCount; ++
i){
9866 ((
char *)
file->typeinfo_seg.data) +
file->typeinfo_seg.len);
9881 DWORD last_offs = 0;
9883 file->impfile_seg.len = 0;
9941 implib->
offset = last_offs;
9958 info->flags =
i | ((ref_type->
tkind & 0xFF) << 24);
9972 file->guidhash_seg.len = 0x80;
9979 file->namehash_seg.len = 0x200;
9987 segdir->
offset = *running_offset;
9989 *running_offset += segdir->
length;
9997 segdir->
res0c = 0xf;
10013 for(
i = 0; i < This->TypeInfoCount; ++
i){
10014 base->memoffset += file_len;
10043 DWORD written, junk_size, junk_offs, running_offset;
10052 for(
i = 0;
i <
This->TypeInfoCount; ++
i)
10053 if(
This->typeinfos[
i]->needs_layout)
10054 ICreateTypeInfo2_LayOut(&
This->typeinfos[
i]->ICreateTypeInfo2_iface);
10058 file.header.magic1 = 0x5446534D;
10059 file.header.magic2 = 0x00010002;
10061 file.header.lcid2 =
This->set_lcid;
10062 file.header.varflags = 0x40 |
This->syskind;
10063 if (
This->HelpFile)
10064 file.header.varflags |= 0x10;
10065 if (
This->HelpStringDll)
10067 file.header.version = (
This->ver_minor << 16) |
This->ver_major;
10068 file.header.flags =
This->libflags;
10069 file.header.helpstringcontext = 0;
10070 file.header.helpcontext =
This->dwHelpContext;
10071 file.header.res44 = 0x20;
10072 file.header.res48 = 0x80;
10073 file.header.dispatchpos =
This->dispatch_href;
10097 file.header.helpfile =
This->HelpFile->offset;
10099 file.header.helpfile = -1;
10101 if(
This->DocString)
10102 file.header.helpstring =
This->DocString->offset;
10104 file.header.helpstring = -1;
10108 file.header.nrtypeinfos =
This->TypeInfoCount;
10111 file.header.NameOffset =
This->Name->offset;
10113 file.header.NameOffset = -1;
10118 file.header.posguid =
This->guid->offset;
10120 file.header.posguid = -1;
10122 junk_size =
file.header.nrtypeinfos *
sizeof(
DWORD);
10124 junk_size +=
sizeof(
DWORD);
10128 *
junk =
This->HelpStringDll->offset;
10140 running_offset = 0;
10142 TRACE(
"header at: 0x%lx\n", running_offset);
10143 running_offset +=
sizeof(
file.header);
10145 TRACE(
"junk at: 0x%lx\n", running_offset);
10146 running_offset += junk_size;
10148 TRACE(
"segdir at: 0x%lx\n", running_offset);
10149 running_offset +=
sizeof(
file.segdir);
10151 TRACE(
"typeinfo at: 0x%lx\n", running_offset);
10154 TRACE(
"guidhashtab at: 0x%lx\n", running_offset);
10157 TRACE(
"guidtab at: 0x%lx\n", running_offset);
10160 TRACE(
"reftab at: 0x%lx\n", running_offset);
10163 TRACE(
"impinfo at: 0x%lx\n", running_offset);
10166 TRACE(
"impfiles at: 0x%lx\n", running_offset);
10169 TRACE(
"namehashtab at: 0x%lx\n", running_offset);
10172 TRACE(
"nametab at: 0x%lx\n", running_offset);
10175 TRACE(
"stringtab at: 0x%lx\n", running_offset);
10178 TRACE(
"typdesc at: 0x%lx\n", running_offset);
10181 TRACE(
"arraydescriptions at: 0x%lx\n", running_offset);
10184 TRACE(
"custdata at: 0x%lx\n", running_offset);
10187 TRACE(
"cdguids at: 0x%lx\n", running_offset);
10190 TRACE(
"res0e at: 0x%lx\n", running_offset);
10193 TRACE(
"res0f at: 0x%lx\n", running_offset);
10196 TRACE(
"aux_seg at: 0x%lx\n", running_offset);
10269 if (!
guid || !varVal)
10278 ULONG helpStringContext)
10280 FIXME(
"%p, %lu - stub\n", iface, helpStringContext);
10323 return ITypeInfo2_QueryInterface(&
This->ITypeInfo2_iface,
riid,
object);
10330 return ITypeInfo2_AddRef(&
This->ITypeInfo2_iface);
10337 return ITypeInfo2_Release(&
This->ITypeInfo2_iface);
10361 if (typeFlags & TYPEFLAG_FDUAL) {
10372 ITypeLib_Release(
stdole);
10376 hres = ICreateTypeInfo2_AddRefTypeInfo(iface,
dispatch, &hreftype);
10382 old_flags =
This->typeattr.wTypeFlags;
10383 This->typeattr.wTypeFlags = typeFlags;
10385 hres = ICreateTypeInfo2_LayOut(iface);
10387 This->typeattr.wTypeFlags = old_flags;
10414 TRACE(
"%p, %ld.\n", iface, helpContext);
10416 This->dwHelpContext = helpContext;
10422 WORD majorVerNum,
WORD minorVerNum)
10426 TRACE(
"%p %d %d\n",
This, majorVerNum, minorVerNum);
10428 This->typeattr.wMajorVerNum = majorVerNum;
10429 This->typeattr.wMinorVerNum = minorVerNum;
10435 ITypeInfo *typeInfo, HREFTYPE *refType)
10442 TYPEATTR *typeattr;
10446 TRACE(
"%p %p %p\n",
This, typeInfo, refType);
10448 if (!typeInfo || !refType)
10460 *refType =
target->hreftype;
10473 implib->
lcid == libattr->lcid &&
10479 if(&implib->
entry == &
This->pTypeLib->implib_list){
10487 libattr->wMinorVerNum, libattr->lcid, &implib->
name);
10490 TRACE(
"QueryPathOfRegTypeLib failed, no name stored: %#lx.\n",
hres);
10495 implib->
lcid = libattr->lcid;
10502 ITypeLib_ReleaseTLibAttr(
container, libattr);
10505 hres = ITypeInfo_GetTypeAttr(typeInfo, &typeattr);
10513 ref_type->
tkind == typeattr->typekind)
10518 if(&ref_type->
entry == &
This->pTypeLib->ref_list){
10521 ref_type->
tkind = typeattr->typekind;
10532 ITypeInfo_ReleaseTypeAttr(typeInfo, typeattr);
10537 This->pTypeLib->dispatch_href = *refType;
10553 if (!funcDesc || funcDesc->oVft & 3)
10556 switch (
This->typeattr.typekind) {
10558 if (funcDesc->funckind != FUNC_STATIC)
10562 if (funcDesc->funckind != FUNC_DISPATCH)
10566 if (funcDesc->funckind != FUNC_PUREVIRTUAL)
10573 if (funcDesc->invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF) &&
10574 !funcDesc->cParams)
10578 funcDesc->oVft % 8 != 0)
10581 memset(&tmp_func_desc, 0,
sizeof(tmp_func_desc));
10584 tmp_func_desc.
funcdesc = *funcDesc;
10586 if (tmp_func_desc.
funcdesc.oVft != 0)
10589 if (funcDesc->cScodes && funcDesc->lprgscode) {
10591 memcpy(tmp_func_desc.
funcdesc.lprgscode, funcDesc->lprgscode,
sizeof(
SCODE) * funcDesc->cScodes);
10594 tmp_func_desc.
funcdesc.cScodes = 0;
10598 for (
i = 0;
i < funcDesc->cParams; ++
i) {
10599 buf_size +=
sizeof(ELEMDESC);
10603 buffer = (
char*)(tmp_func_desc.
funcdesc.lprgelemdescParam + funcDesc->cParams);
10612 for (
i = 0;
i < funcDesc->cParams; ++
i) {
10620 if (tmp_func_desc.
funcdesc.lprgelemdescParam[
i].paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT &&
10634 if (
This->funcdescs) {
10637 if (index < This->typeattr.cFuncs) {
10642 func_desc =
This->funcdescs +
This->typeattr.cFuncs;
10645 for(
i = 0;
i <
This->typeattr.cFuncs + 1; ++
i){
10652 memcpy(func_desc, &tmp_func_desc,
sizeof(tmp_func_desc));
10655 ++
This->typeattr.cFuncs;
10669 TRACE(
"%p, %u, %ld.\n", iface,
index, refType);
10671 switch(
This->typeattr.typekind){
10674 FIXME(
"Unhandled index: -1\n");
10685 if (
index != 0 ||
This->typeattr.cImplTypes)
10689 FIXME(
"Unimplemented typekind: %d\n",
This->typeattr.typekind);
10693 if (
This->impltypes){
10698 if (index < This->typeattr.cImplTypes) {
10703 impl_type =
This->impltypes +
This->typeattr.cImplTypes;
10706 for(
i = 0;
i <
This->typeattr.cImplTypes + 1; ++
i){
10715 impl_type->
hRef = refType;
10717 ++
This->typeattr.cImplTypes;
10719 if((refType & (~0x3)) == (
This->pTypeLib->dispatch_href & (~0x3)))
10720 This->typeattr.wTypeFlags |= TYPEFLAG_FDISPATCHABLE;
10722 hres = ICreateTypeInfo2_LayOut(iface);
10740 if (
index >=
This->typeattr.cImplTypes)
10772 This->typeattr.lpstrSchema =
This->Schema->str;
10786 if (
This->vardescs){
10791 if (index < This->typeattr.cVars) {
10796 var_desc =
This->vardescs +
This->typeattr.cVars;
10801 for(
i = 0;
i <
This->typeattr.cVars + 1; ++
i){
10814 ++
This->typeattr.cVars;
10833 if (
index >=
This->typeattr.cFuncs || numNames == 0)
10836 if (func_desc->
funcdesc.invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF)){
10837 if(numNames > func_desc->
funcdesc.cParams)
10840 if(numNames > func_desc->
funcdesc.cParams + 1)
10843 for(
i = 0;
i <
This->typeattr.cFuncs; ++
i) {
10846 if (iter->
funcdesc.invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF | INVOKE_PROPERTYGET) &&
10847 func_desc->
funcdesc.invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF | INVOKE_PROPERTYGET) &&
10856 for (
i = 1;
i < numNames; ++
i) {
10882 TYPEDESC *tdescAlias)
10907 UINT index, LPOLESTR dllName, LPOLESTR procName)
10958 TRACE(
"%p, %u, %ld.\n", iface,
index, helpContext);
10974 TRACE(
"%p, %u, %ld.\n", iface,
index, helpContext);
11002 This->typeattr.idldescType.dwReserved = idlDesc->dwReserved;
11003 This->typeattr.idldescType.wIDLFlags = idlDesc->wIDLFlags;
11025 hres = ITypeInfo2_GetRefTypeOfImplType(tinfo, 0, &inh_href);
11028 hres = ITypeInfo2_GetRefTypeInfo(tinfo, inh_href, &inh);
11031 hres = ITypeInfo_GetTypeAttr(inh, &
attr);
11033 ITypeInfo_Release(inh);
11036 This->typeattr.cbSizeVft =
attr->cbSizeVft;
11037 ITypeInfo_ReleaseTypeAttr(inh,
attr);
11041 hres = ITypeInfo_GetRefTypeOfImplType(inh, 0, &inh_href);
11044 hres = ITypeInfo_GetRefTypeInfo(inh, inh_href, &
next);
11046 ITypeInfo_Release(inh);
11053 ITypeInfo_Release(inh);
11055 This->typeattr.cbSizeVft = 0;
11060 This->typeattr.cbSizeVft = 0;
11065 This->typeattr.cbSizeVft = 7 *
This->pTypeLib->ptr_size;
11067 This->typeattr.cbSizeVft = 0;
11069 func_desc =
This->funcdescs;
11071 while (i < This->typeattr.cFuncs) {
11072 if (!(func_desc->
funcdesc.oVft & 0x1))
11075 if ((func_desc->
funcdesc.oVft & 0xFFFC) > user_vft)
11076 user_vft = func_desc->
funcdesc.oVft & 0xFFFC;
11078 This->typeattr.cbSizeVft +=
This->pTypeLib->ptr_size;
11087 iter =
This->funcdescs;
11088 while (j < This->typeattr.cFuncs) {
11089 if (iter != func_desc && iter->
funcdesc.memid == func_desc->
funcdesc.memid) {
11091 func_desc->
funcdesc.memid = 0x60000000 + (
depth << 16) +
This->typeattr.cFuncs;
11095 iter =
This->funcdescs;
11108 if (user_vft >
This->typeattr.cbSizeVft)
11109 This->typeattr.cbSizeVft = user_vft +
This->pTypeLib->ptr_size;
11111 for(
i = 0;
i <
This->typeattr.cVars; ++
i){
11120 iter =
This->vardescs;
11121 while (j < This->typeattr.cVars) {
11122 if (iter != var_desc && iter->
vardesc.memid == var_desc->
vardesc.memid) {
11124 var_desc->
vardesc.memid = 0x40000000 + (
depth << 16) +
This->typeattr.cVars;
11128 iter =
This->vardescs;
11154 --
This->typeattr.cFuncs;
11158 sizeof(*
This->funcdescs) * (
This->typeattr.cFuncs -
index));
11169 MEMBERID memid, INVOKEKIND invKind)
11171 FIXME(
"%p, %#lx, %d - stub\n", iface, memid, invKind);
11185 FIXME(
"%p, %#lx - stub\n", iface, memid);
11197 if (
index >=
This->typeattr.cImplTypes)
11201 --
This->typeattr.cImplTypes;
11203 if (index < This->typeattr.cImplTypes)
11206 sizeof(*
This->impltypes));
11223 if (!
guid || !varVal)
11264 ULONG helpStringContext)
11268 TRACE(
"%p, %lu.\n", iface, helpStringContext);
11270 This->dwHelpStringContext = helpStringContext;
11278 FIXME(
"%p, %u, %lu - stub\n", iface,
index, helpStringContext);
11285 FIXME(
"%p, %u, %lu - stub\n", iface,
index, helpStringContext);
11291 FIXME(
"%p - stub\n", iface);
11367 if (lpCust && lpCust->cCustData)
11369 if (lpCust->prgCustData)
11373 for (
i = 0;
i < lpCust->cCustData;
i++)
11377 lpCust->prgCustData =
NULL;
11379 lpCust->cCustData = 0;
PRTL_UNICODE_STRING_BUFFER Path
_STLP_INLINE_LOOP _STLP_STD::pair< _InputIter1, _InputIter2 > mismatch(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2)
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR nameW[]
void dispatch(HANDLE hStopEvent)
static void list_remove(struct list_entry *entry)
static int list_empty(struct list_entry *head)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
#define RegCloseKey(hKey)
struct __type_info type_info
static HINSTANCE instance
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 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 RegDeleteKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ REGSAM samDesired, _In_ DWORD Reserved)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
LONG WINAPI RegEnumKeyExA(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
HRESULT WINAPI GetErrorInfo(ULONG reserved, IErrorInfo **error_info)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
struct tagVARIANT VARIANT
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define CreateFileMappingW(a, b, c, d, e, f)
static __inline const char * debugstr_an(const char *s, int n)
#define GetCurrentProcess()
#define _strnicmp(_String1, _String2, _MaxCount)
#define WINE_DECLARE_DEBUG_CHANNEL(x)
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
#define MultiByteToWideChar
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
DWORD WINAPI SearchPathW(IN LPCWSTR lpPath OPTIONAL, IN LPCWSTR lpFileName, IN LPCWSTR lpExtension OPTIONAL, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart OPTIONAL)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetFinalPathNameByHandleW(_In_ HANDLE hFile, _Out_writes_(cchFilePath) LPWSTR lpszFilePath, _In_ DWORD cchFilePath, _In_ DWORD dwFlags)
BOOL WINAPI FindActCtxSectionGuid(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, const GUID *lpSearchGuid, PACTCTX_SECTION_KEYED_DATA pInfo)
BOOL WINAPI FreeResource(HGLOBAL handle)
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 lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
LCID WINAPI GetSystemDefaultLCID(void)
#define IS_INTRESOURCE(x)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
_ACRTIMP __msvcrt_long __cdecl wcstol(const wchar_t *, wchar_t **, int)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl sscanf(const char *, const char *,...) __WINE_CRT_SCANF_ATTR(2
_ACRTIMP __msvcrt_long __cdecl strtol(const char *, char **, int)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
static wchar_t * wcsdup(const wchar_t *str)
ULONG WINAPI LHashValOfNameSysA(SYSKIND skind, LCID lcid, LPCSTR lpStr)
HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY *psa, UINT nDim, LONG *plUbound)
HRESULT WINAPI SafeArrayAccessData(SAFEARRAY *psa, void **ppvData)
HRESULT WINAPI SafeArrayAllocDescriptorEx(VARTYPE vt, UINT cDims, SAFEARRAY **ppsaOut)
HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
SAFEARRAY *WINAPI SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound)
static ITypeInfoImpl * info_impl_from_ICreateTypeInfo2(ICreateTypeInfo2 *iface)
static void TLBFuncDesc_Constructor(TLBFuncDesc *func_desc)
struct tagITypeInfoImpl ITypeInfoImpl
HRESULT WINAPI CreateTypeLib(SYSKIND syskind, LPCOLESTR szFile, ICreateTypeLib **ppctlib)
static HRESULT WINAPI ITypeLib2_fnGetTypeComp(ITypeLib2 *iface, ITypeComp **ppTComp)
static TLBGuid * TLB_append_guid(struct list *guid_list, const GUID *new_guid, HREFTYPE hreftype)
static HRESULT WINAPI ITypeInfo2_fnGetImplTypeCustData(ITypeInfo2 *iface, UINT index, REFGUID guid, VARIANT *pVarVal)
void WINAPI ClearCustData(CUSTDATA *lpCust)
static SIZE_T TLB_SizeElemDesc(const ELEMDESC *elemdesc)
static HRESULT WINAPI ITypeLib2_fnGetLibAttr(ITypeLib2 *iface, LPTLIBATTR *attr)
static WCHAR * get_interface_key(REFGUID guid, WCHAR *buffer)
static HRESULT WINAPI ITypeInfo_fnGetVarDesc(ITypeInfo2 *iface, UINT index, LPVARDESC *ppVarDesc)
static HRESULT MSFT_ReadAllGuids(TLBContext *pcx)
static HRESULT WINAPI ITypeInfo_fnInvoke(ITypeInfo2 *iface, VOID *pIUnk, MEMBERID memid, UINT16 wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *pArgErr)
static HRESULT WINAPI ITypeLib2_fnGetTypeInfoOfGuid(ITypeLib2 *iface, REFGUID guid, ITypeInfo **ppTInfo)
static TLBGuid * MSFT_ReadGuid(int offset, TLBContext *pcx)
static HRESULT WINAPI ITypeInfo2_fnGetDocumentation2(ITypeInfo2 *iface, MEMBERID memid, LCID lcid, BSTR *pbstrHelpString, DWORD *pdwHelpStringContext, BSTR *pbstrHelpStringDll)
static ULONG WINAPI TLB_Mapping_Release(IUnknown *iface)
static WORD SLTG_ReadString(const char *ptr, const TLBString **pStr, ITypeLibImpl *lib)
static void TLB_unregister_interface(GUID *guid, REGSAM flag)
static int TLB_str_memcmp(void *left, const TLBString *str, DWORD len)
static WORD SLTG_ReadStringA(const char *ptr, char **str)
static TLBVarDesc * TLB_get_vardesc_by_memberid(ITypeInfoImpl *typeinfo, MEMBERID memid)
static void MSFT_ReadValue(VARIANT *pVar, int offset, TLBContext *pcx)
static HRESULT WINAPI ICreateTypeLib2_fnSaveAllChanges(ICreateTypeLib2 *iface)
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteImplType(ICreateTypeInfo2 *iface, UINT index)
static void SLTG_ProcessInterface(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail)
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncCustData(ICreateTypeInfo2 *iface, UINT index, REFGUID guid, VARIANT *varVal)
static const ITypeCompVtbl tlbtcvt
static void TLBVarDesc_Constructor(TLBVarDesc *var_desc)
struct tagTLBString TLBString
static int MSFT_CustData(TLBContext *pcx, int offset, struct list *custdata_list)
static TLBImplType * TLBImplType_Alloc(UINT n)
static ULONG WINAPI ICreateTypeInfo2_fnRelease(ICreateTypeInfo2 *iface)
static HRESULT WINAPI ITypeComp_fnQueryInterface(ITypeComp *iface, REFIID riid, LPVOID *ppv)
static void SLTG_ProcessRecord(char *pBlk, ITypeInfoImpl *pTI, const char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail)
static HRESULT WINAPI ICreateTypeInfo2_fnSetSchema(ICreateTypeInfo2 *iface, LPOLESTR schema)
static HRESULT WINAPI ITypeComp_fnBindType(ITypeComp *iface, OLECHAR *szName, ULONG lHash, ITypeInfo **ppTInfo, ITypeComp **ppTComp)
static HRESULT WINAPI ICreateTypeLib2_fnSetGuid(ICreateTypeLib2 *iface, REFGUID guid)
static HRESULT WINAPI ITypeInfo2_fnGetAllFuncCustData(ITypeInfo2 *iface, UINT index, CUSTDATA *pCustData)
static void WMSFT_free_file(WMSFT_TLBFile *file)
static ITypeInfoImpl * TLB_get_typeinfo_by_name(ITypeLibImpl *typelib, const OLECHAR *name)
static HRESULT WMSFT_fixup_typeinfos(ITypeLibImpl *This, WMSFT_TLBFile *file, DWORD file_len)
static HRESULT WINAPI ITypeInfo2_fnGetVarIndexOfMemId(ITypeInfo2 *iface, MEMBERID memid, UINT *pVarIndex)
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpContext(ICreateTypeInfo2 *iface, UINT index, DWORD helpContext)
static ITypeInfoImpl * MSFT_DoTypeInfo(TLBContext *pcx, int count, ITypeLibImpl *pLibInfo)
#define FromLEDWords(X, Y)
static void tmp_fill_segdir_seg(MSFT_pSeg *segdir, WMSFT_SegContents *contents, DWORD *running_offset)
static HRESULT TLB_ReadTypeLib(LPCWSTR pszFileName, LPWSTR pszPath, UINT cchPath, ITypeLib2 **ppTypeLib)
static HRESULT MSFT_ReadAllStrings(TLBContext *pcx)
static ULONG WINAPI ITypeInfo_fnAddRef(ITypeInfo2 *iface)
static TLBFuncDesc * TLB_get_funcdesc_by_memberid(ITypeInfoImpl *typeinfo, MEMBERID memid)
static HRESULT WINAPI ICreateTypeInfo2_fnSetVersion(ICreateTypeInfo2 *iface, WORD majorVerNum, WORD minorVerNum)
static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeFlags(ICreateTypeInfo2 *iface, UINT typeFlags)
static HRESULT WMSFT_compile_guids(ITypeLibImpl *This, WMSFT_TLBFile *file)
static HRESULT WINAPI ICreateTypeLib2_fnSetName(ICreateTypeLib2 *iface, LPOLESTR name)
static char * SLTG_DoImpls(char *pBlk, ITypeInfoImpl *pTI, BOOL OneOnly, const sltg_ref_lookup_t *ref_lookup)
static void MSFT_GetTdesc(TLBContext *pcx, INT type, TYPEDESC *pTd)
static HRESULT WINAPI ITypeLibComp_fnBindType(ITypeComp *iface, OLECHAR *szName, ULONG lHash, ITypeInfo **ppTInfo, ITypeComp **ppTComp)
static HRESULT TLB_set_custdata(struct list *custdata_list, TLBGuid *tlbguid, VARIANT *var)
static void TLB_FreeVarDesc(VARDESC *)
static HRESULT WINAPI ITypeInfo2_fnGetTypeFlags(ITypeInfo2 *iface, ULONG *pTypeFlags)
static void typeinfo_release_funcdesc(TLBFuncDesc *func)
static HRESULT WINAPI TLB_PEFile_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
static HRESULT WINAPI ICreateTypeLib2_fnSetHelpContext(ICreateTypeLib2 *iface, DWORD helpContext)
static WCHAR * get_typelib_key(REFGUID guid, WORD wMaj, WORD wMin, WCHAR *buffer)
static HRESULT WINAPI ITypeLibComp_fnBind(ITypeComp *iface, OLECHAR *szName, ULONG lHash, WORD wFlags, ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr)
static DWORD WMSFT_append_typedesc(TYPEDESC *desc, WMSFT_TLBFile *file, DWORD *out_mix, INT16 *out_size)
static HRESULT WINAPI ICreateTypeLib2_fnSetHelpFileName(ICreateTypeLib2 *iface, LPOLESTR helpFileName)
static const IUnknownVtbl TLB_Mapping_Vtable
static void dump_TypeInfo(const ITypeInfoImpl *pty)
static HRESULT WINAPI ITypeInfo_fnGetRefTypeInfo(ITypeInfo2 *iface, HREFTYPE hRefType, ITypeInfo **ppTInfo)
static ITypeLibImpl * impl_from_ITypeLib(ITypeLib *iface)
static ITypeLibImpl * TypeLibImpl_Constructor(void)
static void TLBImplType_Constructor(TLBImplType *impl)
static void dump_ELEMDESC(const ELEMDESC *edesc)
static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeDescAlias(ICreateTypeInfo2 *iface, TYPEDESC *tdescAlias)
static HRESULT WINAPI ITypeInfo2_fnGetFuncCustData(ITypeInfo2 *iface, UINT index, REFGUID guid, VARIANT *pVarVal)
static const GUID * TLB_get_guidref(const TLBGuid *guid)
static void ITypeInfoImpl_FuncDescAddHrefOffset(LPFUNCDESC pFuncDesc, UINT hrefoffset)
static TLBString * TLB_append_str(struct list *string_list, BSTR new_str)
static DWORD MSFT_Read(void *buffer, DWORD count, TLBContext *pcx, LONG where)
static HRESULT WINAPI ITypeInfo2_fnGetTypeKind(ITypeInfo2 *iface, TYPEKIND *pTypeKind)
static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(ICreateTypeInfo2 *iface, UINT index, LPOLESTR name)
static HRESULT WINAPI ICreateTypeLib2_fnSetCustData(ICreateTypeLib2 *iface, REFGUID guid, VARIANT *varVal)
#define DISPATCH_HREF_OFFSET
static void WMSFT_compile_impinfo(ITypeLibImpl *This, WMSFT_TLBFile *file)
static HRESULT WINAPI ITypeLib2_fnGetTypeInfo(ITypeLib2 *iface, UINT index, ITypeInfo **ppTInfo)
static HRESULT WINAPI ICreateTypeInfo2_fnSetImplTypeFlags(ICreateTypeInfo2 *iface, UINT index, INT implTypeFlags)
struct tagTLBContext TLBContext
static void TLB_relink_custdata(struct list *custdata_list)
static ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface)
static void dump_TLBVarDesc(const TLBVarDesc *pvd, UINT n)
static void WINAPI ITypeInfo_fnReleaseFuncDesc(ITypeInfo2 *iface, FUNCDESC *pFuncDesc)
static HRESULT WINAPI ITypeInfo2_fnGetAllParamCustData(ITypeInfo2 *iface, UINT indexFunc, UINT indexParam, CUSTDATA *pCustData)
static HRESULT TLB_Mapping_Open(LPCWSTR path, LPVOID *ppBase, DWORD *pdwTLBLength, IUnknown **ppFile)
static void MSFT_DoFuncs(TLBContext *pcx, ITypeInfoImpl *pTI, int cFuncs, int cVars, int offset, TLBFuncDesc **pptfd)
static HRESULT WINAPI ITypeLib2_fnGetAllCustData(ITypeLib2 *iface, CUSTDATA *pCustData)
static HRESULT sltg_get_typelib_ref(const sltg_ref_lookup_t *table, DWORD typeinfo_ref, HREFTYPE *typelib_ref)
static TLBVarDesc * TLB_get_vardesc_by_name(ITypeInfoImpl *typeinfo, const OLECHAR *name)
static SIZE_T TLB_SizeTypeDesc(const TYPEDESC *tdesc, BOOL alloc_initial_space)
static int read_xx_header(HFILE lzfd)
static void SLTG_ProcessModule(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail)
static ULONG WINAPI ITypeComp_fnAddRef(ITypeComp *iface)
static UINT WINAPI ITypeLib2_fnGetTypeInfoCount(ITypeLib2 *iface)
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDesc(ICreateTypeInfo2 *iface, UINT index)
static const IUnknownVtbl TLB_NEFile_Vtable
static HRESULT WINAPI ICreateTypeLib2_fnSetDocString(ICreateTypeLib2 *iface, LPOLESTR doc)
static HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpStringContext(ICreateTypeInfo2 *iface, UINT index, ULONG helpStringContext)
static void SLTG_ProcessEnum(char *pBlk, ITypeInfoImpl *pTI, const char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail)
static HRESULT WINAPI ICreateTypeInfo2_fnSetCustData(ICreateTypeInfo2 *iface, REFGUID guid, VARIANT *varVal)
static void dump_TLBRefType(const ITypeLibImpl *pTL)
static HRESULT WINAPI ITypeInfo_fnGetMops(ITypeInfo2 *iface, MEMBERID memid, BSTR *pBstrMops)
static const ITypeCompVtbl tcompvt
static HRESULT TLB_size_instance(ITypeInfoImpl *info, SYSKIND sys, TYPEDESC *tdesc, ULONG *size, WORD *align)
HRESULT WINAPI CreateDispTypeInfo(INTERFACEDATA *pidata, LCID lcid, ITypeInfo **pptinfo)
static const IUnknownVtbl TLB_PEFile_Vtable
static HRESULT WINAPI ICreateTypeInfo2_fnSetVarDocString(ICreateTypeInfo2 *iface, UINT index, LPOLESTR docString)
static void SLTG_DoFuncs(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI, unsigned short cFuncs, char *pNameTable, const sltg_ref_lookup_t *ref_lookup)
static HRESULT WINAPI ITypeInfo_fnGetImplTypeFlags(ITypeInfo2 *iface, UINT index, INT *pImplTypeFlags)
static HRESULT WINAPI ITypeInfo2_fnGetParamCustData(ITypeInfo2 *iface, UINT indexFunc, UINT indexParam, REFGUID guid, VARIANT *pVarVal)
static HRESULT WINAPI ITypeLib2_fnGetDocumentation(ITypeLib2 *iface, INT index, BSTR *pBstrName, BSTR *pBstrDocString, DWORD *pdwHelpContext, BSTR *pBstrHelpFile)
static HRESULT WINAPI ITypeInfo_fnGetTypeComp(ITypeInfo2 *iface, ITypeComp **ppTComp)
static TYPEDESC std_typedesc[VT_LPWSTR+1]
static const ITypeInfo2Vtbl tinfvt
static WCHAR * get_lcid_subkey(LCID lcid, SYSKIND syskind, WCHAR *buffer)
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
static void MSFT_DoVars(TLBContext *pcx, ITypeInfoImpl *pTI, int cFuncs, int cVars, int offset, TLBVarDesc **pptvd)
HRESULT WINAPI CreateTypeLib2(SYSKIND syskind, LPCOLESTR szFile, ICreateTypeLib2 **ppctlib)
static HRESULT WINAPI ITypeInfo2_fnGetVarCustData(ITypeInfo2 *iface, UINT index, REFGUID guid, VARIANT *pVarVal)
static HRESULT WINAPI ITypeInfo_fnCreateInstance(ITypeInfo2 *iface, IUnknown *pOuterUnk, REFIID riid, VOID **ppvObj)
static BOOL find_typelib_key(REFGUID guid, WORD *wMaj, WORD *wMin)
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpStringContext(ICreateTypeInfo2 *iface, UINT index, ULONG helpStringContext)
static HRESULT TLB_PEFile_Open(LPCWSTR path, INT index, LPVOID *ppBase, DWORD *pdwTLBLength, IUnknown **ppFile)
static DWORD SLTG_ReadLibBlk(LPVOID pLibBlk, ITypeLibImpl *pTypeLibImpl)
static BSTR TLB_get_bstr(const TLBString *str)
static void TLB_fix_typeinfo_ptr_size(ITypeInfoImpl *info)
static HRESULT WINAPI ITypeLib2_fnGetDocumentation2(ITypeLib2 *iface, INT index, LCID lcid, BSTR *pbstrHelpString, DWORD *pdwHelpStringContext, BSTR *pbstrHelpStringDll)
static void WMSFT_write_segment(HANDLE outfile, WMSFT_SegContents *segment)
HRESULT WINAPI RegisterTypeLib(ITypeLib *ptlib, const WCHAR *szFullPath, const WCHAR *szHelpDir)
static void dump_TLBImpLib(const TLBImpLib *import)
static TLBFuncDesc * TLB_get_funcdesc_by_memberid_invkind(ITypeInfoImpl *typeinfo, MEMBERID memid, INVOKEKIND invkind)
#define INVBUF_GET_ARG_PTR_ARRAY(buffer, params)
static HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringDll(ICreateTypeLib2 *iface, LPOLESTR filename)
static HRESULT WINAPI ITypeInfo_fnGetNames(ITypeInfo2 *iface, MEMBERID memid, BSTR *names, UINT max_names, UINT *num_names)
HRESULT WINAPI DispCallFunc(void *pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals, VARTYPE *prgvt, VARIANTARG **prgpvarg, VARIANT *pvargResult)
static ULONG WINAPI TLB_NEFile_AddRef(IUnknown *iface)
static void ITypeInfoImpl_ElemDescAddHrefOffset(LPELEMDESC pElemDesc, UINT hrefoffset)
static HRESULT WINAPI ITypeInfo2_fnGetAllVarCustData(ITypeInfo2 *iface, UINT index, CUSTDATA *pCustData)
static void WINAPI ITypeInfo_fnReleaseVarDesc(ITypeInfo2 *iface, VARDESC *pVarDesc)
static ITypeLib2 * ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength)
static void * TLB_CopyTypeDesc(TYPEDESC *dest, const TYPEDESC *src, void *buffer)
static HRESULT WINAPI ITypeInfo_fnGetIDsOfNames(ITypeInfo2 *iface, LPOLESTR *rgszNames, UINT cNames, MEMBERID *pMemId)
static void MSFT_Seek(TLBContext *pcx, LONG where)
struct tagWMSFT_TLBFile WMSFT_TLBFile
static void TLB_register_interface(TLIBATTR *libattr, LPOLESTR name, TYPEATTR *tattr, DWORD flag)
static const BOOL is_win64
static DWORD WMSFT_append_arraydesc(ARRAYDESC *desc, WMSFT_TLBFile *file)
static HRESULT TLB_NEFile_Open(LPCWSTR path, INT index, LPVOID *ppBase, DWORD *pdwTLBLength, IUnknown **ppFile)
static HRESULT WMSFT_compile_names(ITypeLibImpl *This, WMSFT_TLBFile *file)
static TLBString * MSFT_ReadString(TLBContext *pcx, int offset)
static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpStringContext(ICreateTypeInfo2 *iface, ULONG helpStringContext)
static HRESULT WINAPI ICreateTypeInfo2_fnSetMops(ICreateTypeInfo2 *iface, UINT index, BSTR bstrMops)
struct tagTLBGuid TLBGuid
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDescByMemId(ICreateTypeInfo2 *iface, MEMBERID memid, INVOKEKIND invKind)
static HRESULT WINAPI ITypeInfo_fnGetContainingTypeLib(ITypeInfo2 *iface, ITypeLib **ppTLib, UINT *pIndex)
static ULONG WINAPI ITypeComp_fnRelease(ITypeComp *iface)
static CRITICAL_SECTION_DEBUG cache_section_debug
static HRESULT TLB_AllocAndInitFuncDesc(const FUNCDESC *src, FUNCDESC **dest_ptr, BOOL dispinterface)
#define INVBUF_GET_MISSING_ARG_ARRAY(buffer, params)
static TLB_PEFile * pefile_impl_from_IUnknown(IUnknown *iface)
static void MSFT_DoImplTypes(TLBContext *pcx, ITypeInfoImpl *pTI, int count, int offset)
static HRESULT WINAPI ICreateTypeInfo2_fnAddFuncDesc(ICreateTypeInfo2 *iface, UINT index, FUNCDESC *funcDesc)
static HRESULT MSFT_ReadAllNames(TLBContext *pcx)
static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(ICreateTypeInfo2 *iface, UINT index, VARDESC *varDesc)
static HRESULT WINAPI ITypeLibComp_fnQueryInterface(ITypeComp *iface, REFIID riid, LPVOID *ppv)
static TLB_Mapping * mapping_impl_from_IUnknown(IUnknown *iface)
static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpContext(ICreateTypeInfo2 *iface, DWORD helpContext)
static void dump_TypeDesc(const TYPEDESC *pTD, char *szVarType)
struct tagWMSFT_SegContents WMSFT_SegContents
static HRESULT WINAPI ICreateTypeInfo2_fnSetVarCustData(ICreateTypeInfo2 *iface, UINT index, REFGUID guid, VARIANT *varVal)
HRESULT WINAPI LoadTypeLibEx(LPCOLESTR szFile, REGKIND regkind, ITypeLib **pptLib)
#define INVBUF_ELEMENT_SIZE
HRESULT WINAPI QueryPathOfRegTypeLib(REFGUID guid, WORD wMaj, WORD wMin, LCID lcid, LPBSTR path)
static HRESULT query_typelib_path(REFGUID guid, WORD wMaj, WORD wMin, SYSKIND syskind, LCID lcid, BSTR *path, BOOL redir)
static void dump_VARDESC(const VARDESC *v)
static ITypeLibImpl * impl_from_ICreateTypeLib2(ICreateTypeLib2 *iface)
static TLBVarDesc * TLBVarDesc_Alloc(UINT n)
struct tagWMSFT_ImpFile WMSFT_ImpFile
struct tagITypeLibImpl ITypeLibImpl
static ITypeInfoImpl * ITypeInfoImpl_Constructor(void)
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDesc(ICreateTypeInfo2 *iface, UINT index)
static TLBCustData * TLB_get_custdata_by_guid(const struct list *custdata_list, REFGUID guid)
static HRESULT WINAPI ITypeLib2_fnGetTypeInfoType(ITypeLib2 *iface, UINT index, TYPEKIND *pTKind)
static TLBString * SLTG_ReadName(const char *pNameTable, int offset, ITypeLibImpl *lib)
static BOOL find_ne_resource(HFILE lzfd, LPCSTR typeid, LPCSTR resid, DWORD *resLen, DWORD *resOff)
static HRESULT WINAPI ITypeLib2_fnIsName(ITypeLib2 *iface, LPOLESTR szNameBuf, ULONG lHashVal, BOOL *pfName)
static void WMSFT_compile_guidhash(ITypeLibImpl *This, WMSFT_TLBFile *file)
static VOID WINAPI ITypeLib2_fnReleaseTLibAttr(ITypeLib2 *iface, TLIBATTR *pTLibAttr)
static void dump_TLBImplType(const TLBImplType *impl, UINT n)
static HRESULT WINAPI ITypeInfo_fnAddressOfMember(ITypeInfo2 *iface, MEMBERID memid, INVOKEKIND invKind, PVOID *ppv)
static HRESULT userdefined_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt)
static HRESULT WINAPI ICreateTypeLib2_fnSetVersion(ICreateTypeLib2 *iface, WORD majorVerNum, WORD minorVerNum)
static void dump_DispParms(const DISPPARAMS *pdp)
static struct list tlb_cache
static ULONG WINAPI ITypeInfo_fnRelease(ITypeInfo2 *iface)
static DWORD WMSFT_compile_typeinfo_aux(ITypeInfoImpl *info, WMSFT_TLBFile *file)
static void ITypeInfoImpl_Destroy(ITypeInfoImpl *This)
static HRESULT WINAPI ICreateTypeInfo2_fnSetName(ICreateTypeInfo2 *iface, LPOLESTR name)
static ULONG WINAPI TLB_PEFile_AddRef(IUnknown *iface)
static HRESULT WINAPI ICreateTypeLib2_fnDeleteTypeInfo(ICreateTypeLib2 *iface, LPOLESTR name)
static HRESULT get_iface_guid(ITypeInfo *tinfo, HREFTYPE href, GUID *guid)
static CRITICAL_SECTION cache_section
static ITypeLibImpl * impl_from_ITypeLib2(ITypeLib2 *iface)
static HRESULT WINAPI ITypeInfo_fnQueryInterface(ITypeInfo2 *iface, REFIID riid, VOID **ppvObject)
static ULONG WINAPI TLB_PEFile_Release(IUnknown *iface)
static HRESULT WINAPI ITypeInfo2_fnGetAllImplTypeCustData(ITypeInfo2 *iface, UINT index, CUSTDATA *pCustData)
static const ITypeLib2Vtbl tlbvt
static sltg_ref_lookup_t * SLTG_DoRefs(SLTG_RefInfo *pRef, ITypeLibImpl *pTL, char *pNameTable)
static HRESULT WINAPI ICreateTypeInfo2_fnSetDocString(ICreateTypeInfo2 *iface, LPOLESTR doc)
static ULONG WINAPI TLB_NEFile_Release(IUnknown *iface)
static HRESULT WINAPI ICreateTypeInfo2_fnAddImplType(ICreateTypeInfo2 *iface, UINT index, HREFTYPE refType)
static BOOL TLB_is_propgetput(INVOKEKIND invkind)
HRESULT WINAPI RegisterTypeLibForUser(ITypeLib *ptlib, OLECHAR *szFullPath, OLECHAR *szHelpDir)
static void WMSFT_compile_impfile(ITypeLibImpl *This, WMSFT_TLBFile *file)
static void WMSFT_compile_namehash(ITypeLibImpl *This, WMSFT_TLBFile *file)
HRESULT WINAPI UnRegisterTypeLib(REFGUID libid, WORD wVerMajor, WORD wVerMinor, LCID lcid, SYSKIND syskind)
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(ICreateTypeInfo2 *iface, UINT index, LPOLESTR *names, UINT numNames)
static ULONG WINAPI ITypeLibComp_fnAddRef(ITypeComp *iface)
static int get_ptr_size(SYSKIND syskind)
static HRESULT WINAPI ITypeLib2_fnQueryInterface(ITypeLib2 *iface, REFIID riid, void **ppv)
static BOOL func_restricted(const FUNCDESC *desc)
static HRESULT TLB_CopyElemDesc(const ELEMDESC *src, ELEMDESC *dest, char **buffer)
static HRESULT typeinfo_getnames(ITypeInfo *iface, MEMBERID memid, BSTR *names, UINT max_names, UINT *num_names, BOOL dispinterface)
static ITypeInfoImpl * impl_from_ITypeInfo2(ITypeInfo2 *iface)
static ITypeInfoImpl * info_impl_from_ITypeComp(ITypeComp *iface)
static HRESULT WINAPI ITypeInfo_fnGetFuncDesc(ITypeInfo2 *iface, UINT index, LPFUNCDESC *ppFuncDesc)
static HRESULT WINAPI ITypeInfo_fnGetTypeAttr(ITypeInfo2 *iface, LPTYPEATTR *ppTypeAttr)
static HRESULT WINAPI ITypeLib2_fnFindName(ITypeLib2 *iface, LPOLESTR name, ULONG hash, ITypeInfo **ppTInfo, MEMBERID *memid, UINT16 *found)
static void SLTG_ProcessDispatch(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail)
static HRESULT WINAPI ITypeInfo_fnGetDocumentation(ITypeInfo2 *iface, MEMBERID memid, BSTR *pBstrName, BSTR *pBstrDocString, DWORD *pdwHelpContext, BSTR *pBstrHelpFile)
static HRESULT WINAPI ICreateTypeLib2_fnSetLibFlags(ICreateTypeLib2 *iface, UINT libFlags)
static WORD * SLTG_DoElem(WORD *pType, char *pBlk, ELEMDESC *pElem, const sltg_ref_lookup_t *ref_lookup)
struct tagTLBImpLib TLBImpLib
static ITypeLibImpl * impl_from_ITypeComp(ITypeComp *iface)
static const char *const typekind_desc[]
static HRESULT TLB_AllocAndInitVarDesc(const VARDESC *src, VARDESC **dest_ptr)
static ULONG WINAPI ITypeLib2_fnAddRef(ITypeLib2 *iface)
struct tagTLBRefType TLBRefType
static HRESULT WINAPI ICreateTypeLib2_fnCreateTypeInfo(ICreateTypeLib2 *iface, LPOLESTR name, TYPEKIND kind, ICreateTypeInfo **ctinfo)
static HRESULT WINAPI ITypeLib2_fnGetLibStatistics(ITypeLib2 *iface, ULONG *pcUniqueNames, ULONG *pcchUniqueNames)
static HRESULT WINAPI ITypeInfo_fnGetDllEntry(ITypeInfo2 *iface, MEMBERID memid, INVOKEKIND invKind, BSTR *pBstrDllName, BSTR *pBstrName, WORD *pwOrdinal)
static const GUID * TLB_get_guid_null(const TLBGuid *guid)
static void WINAPI ITypeInfo_fnReleaseTypeAttr(ITypeInfo2 *iface, TYPEATTR *pTypeAttr)
static HRESULT TLB_SanitizeVariant(VARIANT *var)
static HRESULT WINAPI ITypeLib2_fnGetCustData(ITypeLib2 *iface, REFGUID guid, VARIANT *pVarVal)
struct tagWMSFT_RefChunk WMSFT_RefChunk
static DWORD WMSFT_compile_custdata(struct list *custdata_list, WMSFT_TLBFile *file)
static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
static ITypeLib2 * ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength)
static DWORD MSFT_ReadLEWords(void *buffer, DWORD count, TLBContext *pcx, LONG where)
static const ICreateTypeInfo2Vtbl CreateTypeInfo2Vtbl
static void dump_FUNCDESC(const FUNCDESC *funcdesc)
static HRESULT ITypeInfoImpl_GetDispatchRefTypeInfo(ITypeInfo *iface, HREFTYPE *hRefType, ITypeInfo **ppTInfo)
struct tagTLBCustData TLBCustData
struct tagTLBImplType TLBImplType
static HRESULT WINAPI ICreateTypeInfo2_fnSetAlignment(ICreateTypeInfo2 *iface, WORD alignment)
static HRESULT WINAPI ITypeInfo2_fnGetAllCustData(ITypeInfo2 *iface, CUSTDATA *pCustData)
static HRESULT WINAPI ICreateTypeInfo2_fnSetParamCustData(ICreateTypeInfo2 *iface, UINT funcIndex, UINT paramIndex, REFGUID guid, VARIANT *varVal)
static DWORD MSFT_ReadLEDWords(void *buffer, DWORD count, TLBContext *pcx, LONG where)
static void dump_TLBFuncDesc(const TLBFuncDesc *pfd, UINT n)
static HRESULT WINAPI ITypeComp_fnBind(ITypeComp *iface, OLECHAR *szName, ULONG lHash, WORD wFlags, ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr)
static HRESULT ITypeInfoImpl_GetInternalFuncDesc(ITypeInfo *iface, UINT index, const TLBFuncDesc **func_desc, UINT *hrefoffset)
static HRESULT WINAPI ICreateTypeLib2_fnQueryInterface(ICreateTypeLib2 *iface, REFIID riid, void **object)
static DWORD WMSFT_encode_variant(VARIANT *value, WMSFT_TLBFile *file)
static ULONG WINAPI TLB_Mapping_AddRef(IUnknown *iface)
static WORD * SLTG_DoType(WORD *pType, char *pBlk, TYPEDESC *pTD, const sltg_ref_lookup_t *ref_lookup)
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDescByMemId(ICreateTypeInfo2 *iface, MEMBERID memid)
static HRESULT WINAPI ICreateTypeInfo2_fnSetImplTypeCustData(ICreateTypeInfo2 *iface, UINT index, REFGUID guid, VARIANT *varVal)
static void SLTG_ProcessAlias(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail)
static BOOL TLB_GUIDFromString(const char *str, GUID *guid)
static ITypeInfoImpl * impl_from_ITypeInfo(ITypeInfo *iface)
static HRESULT WINAPI ICreateTypeInfo2_fnSetGuid(ICreateTypeInfo2 *iface, REFGUID guid)
static ULONG WINAPI ICreateTypeInfo2_fnAddRef(ICreateTypeInfo2 *iface)
#define INVBUF_GET_ARG_ARRAY(buffer, params)
static HREFTYPE MSFT_ReadHreftype(TLBContext *pcx, int offset)
static ULONG WINAPI ICreateTypeLib2_fnAddRef(ICreateTypeLib2 *iface)
static TLBString * MSFT_ReadName(TLBContext *pcx, int offset)
#define INVBUF_GET_ARG_TYPE_ARRAY(buffer, params)
static void SLTG_ProcessCoClass(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, SLTG_TypeInfoTail *pTITail)
static HRESULT typedescvt_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt)
static HRESULT WINAPI ITypeInfo2_fnGetFuncIndexOfMemId(ITypeInfo2 *iface, MEMBERID memid, INVOKEKIND invKind, UINT *pFuncIndex)
static HRESULT WMSFT_compile_strings(ITypeLibImpl *This, WMSFT_TLBFile *file)
static HRESULT WINAPI ICreateTypeInfo2_fnInvalidate(ICreateTypeInfo2 *iface)
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
struct tagTLBParDesc TLBParDesc
static ULONG WINAPI ITypeLibComp_fnRelease(ITypeComp *iface)
HRESULT WINAPI UnRegisterTypeLibForUser(REFGUID libid, WORD wVerMajor, WORD wVerMinor, LCID lcid, SYSKIND syskind)
static HRESULT TLB_get_size_from_hreftype(ITypeInfoImpl *info, HREFTYPE href, ULONG *size, WORD *align)
static void TLB_FreeElemDesc(ELEMDESC *elemdesc)
static void SLTG_DoVars(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI, unsigned short cVars, const char *pNameTable, const sltg_ref_lookup_t *ref_lookup)
static int hash_guid(GUID *guid)
static HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringContext(ICreateTypeLib2 *iface, ULONG helpStringContext)
#define FromLEWords(X, Y)
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncDocString(ICreateTypeInfo2 *iface, UINT index, LPOLESTR docString)
static TLBFuncDesc * TLBFuncDesc_Alloc(UINT n)
static ULONG WINAPI ITypeLib2_fnRelease(ITypeLib2 *iface)
static HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo(ICreateTypeInfo2 *iface, ITypeInfo *typeInfo, HREFTYPE *refType)
static HRESULT MSFT_ReadAllRefs(TLBContext *pcx)
static TLB_NEFile * nefile_impl_from_IUnknown(IUnknown *iface)
#define TLB_REF_NOT_FOUND
static void WMSFT_compile_typeinfo_seg(ITypeLibImpl *This, WMSFT_TLBFile *file, DWORD *junk)
static HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpContext(ICreateTypeInfo2 *iface, UINT index, DWORD helpContext)
static HRESULT WINAPI ICreateTypeLib2_fnSetLcid(ICreateTypeLib2 *iface, LCID lcid)
static const ICreateTypeLib2Vtbl CreateTypeLib2Vtbl
static HRESULT WINAPI TLB_NEFile_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
struct tagTLBFuncDesc TLBFuncDesc
static void TLB_FreeCustData(struct list *custdata_list)
static HRESULT WINAPI ICreateTypeInfo2_fnDefineFuncAsDllEntry(ICreateTypeInfo2 *iface, UINT index, LPOLESTR dllName, LPOLESTR procName)
static HRESULT WINAPI ITypeInfo_fnGetRefTypeOfImplType(ITypeInfo2 *iface, UINT index, HREFTYPE *pRefType)
static BSTR TLB_MultiByteToBSTR(const char *ptr)
#define DISPATCH_HREF_MASK
static DWORD WMSFT_compile_typeinfo(ITypeInfoImpl *info, INT16 index, WMSFT_TLBFile *file, char *data)
static DWORD WMSFT_compile_typeinfo_ref(ITypeInfoImpl *info, WMSFT_TLBFile *file)
static HRESULT ITypeInfoImpl_GetInternalDispatchFuncDesc(ITypeInfo *iface, UINT index, const TLBFuncDesc **ppFuncDesc, UINT *funcs, UINT *hrefoffset)
static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeIdldesc(ICreateTypeInfo2 *iface, IDLDESC *idlDesc)
static HRESULT WINAPI ICreateTypeInfo2_fnQueryInterface(ICreateTypeInfo2 *iface, REFIID riid, void **object)
static void TLB_abort(void)
static HRESULT WINAPI ITypeInfo2_fnGetCustData(ITypeInfo2 *iface, REFGUID guid, VARIANT *pVarVal)
static HRESULT WINAPI TLB_Mapping_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
static HRESULT TLB_copy_all_custdata(const struct list *custdata_list, CUSTDATA *pCustData)
struct tagTLBVarDesc TLBVarDesc
static void dump_TLBFuncDescOne(const TLBFuncDesc *pfd)
static TLBParDesc * TLBParDesc_Constructor(UINT n)
struct tagMSFT_ImpInfo MSFT_ImpInfo
#define SLTG_FUNCTION_FLAGS_PRESENT
#define SLTG_COMPOBJ_MAGIC
#define SLTG_TIHEADER_MAGIC
#define SLTG_FUNCTION_MAGIC
#define SLTG_STATIC_FUNCTION_MAGIC
struct tagMSFT_TypeInfoBase MSFT_TypeInfoBase
#define SLTG_LIBBLK_MAGIC
#define SLTG_VAR_WITH_FLAGS_MAGIC
#define SLTG_DISPATCH_FUNCTION_MAGIC
#define MSFT_IMPINFO_OFFSET_IS_GUID
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
static const char * debugstr_variant(const VARIANT *var)
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
int align(int length, int align)
static const FxOffsetAndName offsets[]
GLint GLint GLsizei GLsizei GLsizei depth
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLboolean GLboolean GLboolean b
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
GLuint GLdouble GLdouble GLint GLint order
GLboolean GLboolean GLboolean GLboolean a
GLubyte GLubyte GLubyte GLubyte w
GLsizeiptr const GLvoid GLenum usage
GLfloat GLfloat GLfloat GLfloat h
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 flag
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
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
FxContextHeader * pHeader
#define MB_ERR_INVALID_CHARS
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
LONG WINAPI LZSeek(HFILE fd, LONG off, INT type)
INT WINAPI LZRead(HFILE fd, LPSTR vbuf, INT toread)
HFILE WINAPI LZOpenFileW(LPWSTR fn, LPOFSTRUCT ofs, WORD mode)
void WINAPI LZClose(HFILE fd)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
#define FILE_NAME_NORMALIZED
static const DWORD ptr_size
D3D11_SHADER_VARIABLE_DESC desc
static DWORD LPDWORD reslen
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG PVOID ULONG out_size
static OLECHAR OLECHAR *static SYSKIND
static const char * contents
static VARIANTARG static DISPID
_Out_ PULONG _Out_ PULONG pIndex
#define REG_CREATED_NEW_KEY
#define LOCALE_USER_DEFAULT
#define MAKELCID(lgid, srtid)
HRESULT WINAPI DECLSPEC_HOTPATCH GetActiveObject(REFCLSID rcid, LPVOID preserved, LPUNKNOWN *ppunk)
BSTR WINAPI SysAllocString(LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI DECLSPEC_HOTPATCH SysAllocStringByteLen(LPCSTR str, UINT len)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define IMAGE_NT_SIGNATURE
#define IMAGE_OS2_SIGNATURE
#define IMAGE_DOS_SIGNATURE
static const WCHAR szName[]
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
for(i=0;i< sizeof(testsuite)/sizeof(testsuite[0]);++i) ok(call_test(testsuite[i].func)
static unsigned __int64 next
#define SUBLANG_ENGLISH_US
__WINE_SERVER_LIST_INLINE unsigned int list_count(const struct list *list)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
static struct __wine_debug_functions funcs
static PIXELFORMATDESCRIPTOR pfd
LIST_ENTRY ProcessLocksList
const TLBString * DocString
BOOL not_attached_to_typelib
struct list * pcustdata_list
const TLBString * DllName
ITypeInfo2 ITypeInfo2_iface
DWORD dwHelpStringContext
ITypeComp ITypeComp_iface
struct list custdata_list
ICreateTypeInfo2 ICreateTypeInfo2_iface
ICreateTypeLib2 ICreateTypeLib2_iface
ITypeLib2 ITypeLib2_iface
const TLBString * HelpFile
struct list custdata_list
const TLBString * DocString
struct tagITypeInfoImpl ** typeinfos
ITypeComp ITypeComp_iface
const TLBString * HelpStringDll
MSFT_pSeg pArrayDescriptions
const TLBString * HelpString
struct list custdata_list
struct tagITypeLibImpl * pImpTypeLib
struct list custdata_list
struct list custdata_list
const TLBString * HelpString
struct list custdata_list
WMSFT_SegContents aux_seg
WMSFT_SegContents typeinfo_seg
WMSFT_SegContents namehash_seg
WMSFT_SegContents ref_seg
WMSFT_SegContents impinfo_seg
WMSFT_SegContents arraydesc_seg
WMSFT_SegContents impfile_seg
WMSFT_SegContents custdata_seg
WMSFT_SegContents guidhash_seg
WMSFT_SegContents guid_seg
WMSFT_SegContents string_seg
WMSFT_SegContents cdguids_seg
WMSFT_SegContents name_seg
WMSFT_SegContents typdesc_seg
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, const VARIANTARG *pvargSrc)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, const VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, const VARIANTARG *pvargSrc)
void WINAPI VariantInit(VARIANTARG *pVarg)
HRESULT VARIANT_ClearInd(VARIANTARG *pVarg)
static unsigned stack_offset(compile_ctx_t *ctx)
WORD WORD PSZ PSZ pszFileName
_In_ WDFCOLLECTION _In_ ULONG Index
DWORD WINAPI GetLastError(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define LOAD_LIBRARY_AS_DATAFILE
void WINAPI DebugBreak(void)
#define LOAD_WITH_ALTERED_SEARCH_PATH
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define DONT_RESOLVE_DLL_REFERENCES
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
_In_ PATHOBJ _In_ CLIPOBJ _In_ BRUSHOBJ _In_ POINTL _In_ MIX mix
#define TYPE_E_BADMODULEKIND
#define DISP_E_PARAMNOTFOUND
#define DISP_E_NONAMEDARGS
#define TYPE_E_REGISTRYACCESS
#define TYPE_E_ELEMENTNOTFOUND
#define TYPE_E_DLLFUNCTIONNOTFOUND
#define DISP_E_BADVARTYPE
#define TYPE_E_AMBIGUOUSNAME
#define TYPE_E_INCONSISTENTPROPFUNCS
#define DISP_E_BADPARAMCOUNT
#define TYPE_E_TYPEMISMATCH
#define STG_E_FILENOTFOUND
#define DISP_E_NOTACOLLECTION
#define TYPE_E_CANTLOADLIBRARY
#define DISP_E_MEMBERNOTFOUND
#define TYPE_E_NAMECONFLICT
#define CLASS_E_NOAGGREGATION
#define TYPE_E_INVALIDSTATE
#define TYPE_E_LIBNOTREGISTERED
#define DISP_E_UNKNOWNNAME
#define STG_E_INSUFFICIENTMEMORY
#define HKEY_CLASSES_ROOT
#define MAKEINTRESOURCEA(i)
#define MAKEINTRESOURCEW(i)