57#define NONAMELESSUNION
109#ifdef WORDS_BIGENDIAN
112 return (((p_iVal & 0x00FF) << 8) |
113 ((p_iVal & 0xFF00) >> 8));
119 return (((p_iVal & 0x000000FF) << 24) |
120 ((p_iVal & 0x0000FF00) << 8) |
121 ((p_iVal & 0x00FF0000) >> 8) |
122 ((p_iVal & 0xFF000000) >> 24));
125#define FromLEWord(X) (X)
126#define FromLEDWord(X) (X)
129#define DISPATCH_HREF_OFFSET 0x01000000
130#define DISPATCH_HREF_MASK 0xff000000
137#ifdef WORDS_BIGENDIAN
142 p_iSize /=
sizeof(
WORD);
156 p_iSize /=
sizeof(
DWORD);
165#define FromLEWords(X,Y)
166#define FromLEDWords(X,Y)
174 static const WCHAR typelibW[] = {
'T',
'y',
'p',
'e',
'l',
'i',
'b',
'\\',0};
178 INT best_maj = -1, best_min = -1;
197 if (*wMaj == 0xffff && *wMin == 0xffff)
199 if (v_maj > best_maj) best_maj = v_maj;
200 if (v_min > best_min) best_min = v_min;
202 else if (*wMaj == v_maj)
211 if (*wMin != 0xffff && v_min > best_min) best_min = v_min;
218 TRACE(
"found best_maj %d, best_min %d\n", best_maj, best_min);
220 if (*wMaj == 0xffff && *wMin == 0xffff)
222 if (best_maj >= 0 && best_min >= 0)
230 if (*wMaj == best_maj && best_min >= 0)
242 static const WCHAR TypelibW[] = {
'T',
'y',
'p',
'e',
'l',
'i',
'b',
'\\',0};
243 static const WCHAR VersionFormatW[] = {
'\\',
'%',
'x',
'.',
'%',
'x',0};
255 static const WCHAR InterfaceW[] = {
'I',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',
'\\',0};
266 static const WCHAR LcidFormatW[] = {
'%',
'l',
'x',
'\\',0};
267 static const WCHAR win16W[] = {
'w',
'i',
'n',
'1',
'6',0};
268 static const WCHAR win32W[] = {
'w',
'i',
'n',
'3',
'2',0};
269 static const WCHAR win64W[] = {
'w',
'i',
'n',
'6',
'4',0};
278 TRACE(
"Typelib is for unsupported syskind %i\n", syskind);
315 ACTCTX_SECTION_KEYED_DATA
data;
362 else if (myLCID == lcid)
367 else if ((myLCID ==
SUBLANGID(lcid)) && myLCID)
435 hres = ICreateTypeLib2_QueryInterface(typelib2, &IID_ICreateTypeLib, (
void **)&ctlib);
436 ICreateTypeLib2_Release(typelib2);
483 if (!szFile || !pptLib)
495 if (((szFile[0] ==
'\\') && (szFile[1] ==
'\\')) ||
496 (szFile[0] && (szFile[1] ==
':')))
break;
502 ITypeLib_Release(*pptLib);
550 if ((wVerMajor!=0xffff || wVerMinor!=0xffff) && *ppTLib)
554 res = ITypeLib_GetLibAttr(*ppTLib, &
attr);
558 ITypeLib_ReleaseTLibAttr(*ppTLib,
attr);
562 ITypeLib_Release(*ppTLib);
580static const WCHAR ProxyStubClsidW[] = {
'P',
'r',
'o',
'x',
'y',
'S',
't',
'u',
'b',
'C',
'l',
's',
'i',
'd',0};
581static const WCHAR ProxyStubClsid32W[] = {
'P',
'r',
'o',
'x',
'y',
'S',
't',
'u',
'b',
'C',
'l',
's',
'i',
'd',
'3',
'2',0};
588 static const WCHAR typelib_proxy_clsid[] = {
'{',
'0',
'0',
'0',
'2',
'0',
'4',
'2',
'4',
'-',
589 '0',
'0',
'0',
'0',
'-',
'0',
'0',
'0',
'0',
'-',
'C',
'0',
'0',
'0',
'-',
590 '0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'4',
'6',
'}',0};
591 static const WCHAR dispatch_proxy_clsid[] = {
'{',
'0',
'0',
'0',
'2',
'0',
'4',
'2',
'0',
'-',
592 '0',
'0',
'0',
'0',
'-',
'0',
'0',
'0',
'0',
'-',
'C',
'0',
'0',
'0',
'-',
593 '0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'4',
'6',
'}',0};
599 const WCHAR *proxy_clsid;
601 if (tattr->typekind ==
TKIND_INTERFACE || (tattr->wTypeFlags & TYPEFLAG_FDUAL))
602 proxy_clsid = typelib_proxy_clsid;
604 proxy_clsid = dispatch_proxy_clsid;
613 (
const BYTE *)proxy_clsid,
sizeof(typelib_proxy_clsid));
620 (
const BYTE *)proxy_clsid,
sizeof(typelib_proxy_clsid));
628 static const WCHAR fmtver[] = {
'%',
'x',
'.',
'%',
'x',0 };
629 static const WCHAR VersionW[] = {
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
634 swprintf(
buffer, fmtver, libattr->wMajorVerNum, libattr->wMinorVerNum);
667 if (ptlib ==
NULL || szFullPath ==
NULL)
670 if (
FAILED(ITypeLib_GetLibAttr(ptlib, &
attr)))
718 static const WCHAR formatW[] = {
'%',
'u',0};
742 pIndexStr =
wcsrchr(szHelpDir,
'\\');
749 if (szHelpDir !=
NULL) {
768 types = ITypeLib_GetTypeInfoCount(ptlib);
769 for (tidx=0; tidx<
types; tidx++) {
770 if (
SUCCEEDED(ITypeLib_GetTypeInfoType(ptlib, tidx, &kind))) {
779 ITypeLib_GetTypeInfo(ptlib, tidx, &tinfo);
784 ITypeLib_GetTypeInfo(ptlib, tidx, &tinfo);
793 TYPEATTR *tattr =
NULL;
794 ITypeInfo_GetTypeAttr(tinfo, &tattr);
802#define XX(x) if (TYPEFLAG_##x & tattr->wTypeFlags) MESSAGE(#x"|");
824 if ((kind ==
TKIND_INTERFACE && (tattr->wTypeFlags & TYPEFLAG_FOLEAUTOMATION)) ||
839 ITypeInfo_ReleaseTypeAttr(tinfo, tattr);
842 ITypeInfo_Release(tinfo);
849 ITypeLib_ReleaseTLibAttr(ptlib,
attr);
856 WCHAR subKeyName[50];
892 WCHAR subKeyName[50];
895 BOOL deleteOtherStuff;
897 TYPEATTR* typeAttr =
NULL;
910 TRACE(
"Unsupported syskind %i\n", syskind);
934 numTypes = ITypeLib_GetTypeInfoCount(typeLib);
935 for (
i=0;
i<numTypes;
i++) {
937 if (ITypeLib_GetTypeInfoType(typeLib,
i, &kind) !=
S_OK) {
945 if (ITypeLib_GetTypeInfo(typeLib,
i, &typeInfo) !=
S_OK) {
948 if (ITypeInfo_GetTypeAttr(typeInfo, &typeAttr) !=
S_OK) {
952 if ((kind ==
TKIND_INTERFACE && (typeAttr->wTypeFlags & TYPEFLAG_FOLEAUTOMATION)) ||
968 if (typeAttr) ITypeInfo_ReleaseTypeAttr(typeInfo, typeAttr);
970 if (typeInfo) ITypeInfo_Release(typeInfo);
977 *
wcsrchr( subKeyName,
'\\' ) = 0;
983 deleteOtherStuff =
TRUE;
991 deleteOtherStuff =
FALSE;
996 if (deleteOtherStuff) {
1003 *
wcsrchr( keyName,
'\\' ) = 0;
1009 if (typeLib) ITypeLib_Release(typeLib);
1032 FIXME(
"(%p, %s, %s) registering the typelib system-wide\n", ptlib,
1052 FIXME(
"(%s, %u, %u, %u, %u) unregistering the typelib system-wide\n",
1194#define TLB_REF_USE_GUID -2
1196#define TLB_REF_INTERNAL (void*)-2
1197#define TLB_REF_NOT_FOUND (void*)-1
1349 WARN(
"Unhandled syskind: 0x%x\n", syskind);
1387 pTD->u.hreftype);
break;
1397 pTD->u.lpadesc->cDims);
1409 MESSAGE(
"\t\ttdesc.vartype %d (%s)\n",edesc->tdesc.vt,
buf);
1410 MESSAGE(
"\t\tu.paramdesc.wParamFlags");
1413 if (
flags & PARAMFLAG_FOUT)
MESSAGE(
" PARAMFLAG_FOUT");
1414 if (
flags & PARAMFLAG_FLCID)
MESSAGE(
" PARAMFLAG_FLCID");
1415 if (
flags & PARAMFLAG_FRETVAL)
MESSAGE(
" PARAMFLAG_FRETVAL");
1416 if (
flags & PARAMFLAG_FOPT)
MESSAGE(
" PARAMFLAG_FOPT");
1417 if (
flags & PARAMFLAG_FHASDEFAULT)
MESSAGE(
" PARAMFLAG_FHASDEFAULT");
1418 if (
flags & PARAMFLAG_FHASCUSTDATA)
MESSAGE(
" PARAMFLAG_FHASCUSTDATA");
1419 MESSAGE(
"\n\t\tu.paramdesc.lpex %p\n",edesc->u.paramdesc.pparamdescex);
1423 MESSAGE(
"memid is %08x\n",funcdesc->memid);
1424 for (
i=0;
i<funcdesc->cParams;
i++) {
1428 MESSAGE(
"\tfunckind: %d (",funcdesc->funckind);
1429 switch (funcdesc->funckind) {
1430 case FUNC_VIRTUAL:
MESSAGE(
"virtual");
break;
1431 case FUNC_PUREVIRTUAL:
MESSAGE(
"pure virtual");
break;
1432 case FUNC_NONVIRTUAL:
MESSAGE(
"nonvirtual");
break;
1433 case FUNC_STATIC:
MESSAGE(
"static");
break;
1434 case FUNC_DISPATCH:
MESSAGE(
"dispatch");
break;
1435 default:
MESSAGE(
"unknown");
break;
1437 MESSAGE(
")\n\tinvkind: %d (",funcdesc->invkind);
1438 switch (funcdesc->invkind) {
1439 case INVOKE_FUNC:
MESSAGE(
"func");
break;
1440 case INVOKE_PROPERTYGET:
MESSAGE(
"property get");
break;
1441 case INVOKE_PROPERTYPUT:
MESSAGE(
"property put");
break;
1442 case INVOKE_PROPERTYPUTREF:
MESSAGE(
"property put ref");
break;
1444 MESSAGE(
")\n\tcallconv: %d (",funcdesc->callconv);
1445 switch (funcdesc->callconv) {
1447 case CC_PASCAL:
MESSAGE(
"pascal");
break;
1449 case CC_SYSCALL:
MESSAGE(
"syscall");
break;
1452 MESSAGE(
")\n\toVft: %d\n", funcdesc->oVft);
1453 MESSAGE(
"\tcParamsOpt: %d\n", funcdesc->cParamsOpt);
1454 MESSAGE(
"\twFlags: %x\n", funcdesc->wFuncFlags);
1456 MESSAGE(
"\telemdescFunc (return value type):\n");
1477 for (
i=0;
i<
pfd->funcdesc.cParams;
i++)
1486 else if(
pfd->Entry == (
void*)-1)
1487 MESSAGE(
"\tentry: invalid\n");
1516 TRACE_(
typelib)(
"v%d.%d lcid=%x offset=%x\n",
import->wVersionMajor,
1517 import->wVersionMinor,
import->lcid,
import->offset);
1527 if(
ref->index == -1)
1545 TRACE_(
typelib)(
"implementing/inheriting interface hRef = %x implflags %x\n",
1556 TRACE(
"args=%u named args=%u\n", pdp->cArgs, pdp->cNamedArgs);
1558 if (pdp->cNamedArgs && pdp->rgdispidNamedArgs)
1560 TRACE(
"named args:\n");
1562 TRACE(
"\t0x%x\n", pdp->rgdispidNamedArgs[
index] );
1565 if (pdp->cArgs && pdp->rgvarg)
1575 TRACE(
"%p ref=%u\n", pty, pty->
ref);
1595 MESSAGE(
"wVarFlags %x\n",
v->wVarFlags);
1596 MESSAGE(
"varkind %d\n",
v->varkind);
1623 if (alloc_initial_space)
1624 size +=
sizeof(TYPEDESC);
1693 UINT n, MEMBERID memid)
1696 if(funcdescs->
funcdesc.memid == memid)
1705 UINT n, MEMBERID memid)
1708 if(vardescs->
vardesc.memid == memid)
1829 const GUID *new_guid, HREFTYPE hreftype)
1843 guid->hreftype = hreftype;
1874 cust_data->
guid = tlbguid;
1918 hr = ITypeInfo2_GetRefTypeInfo(&
info->ITypeInfo2_iface, href, &
other);
1924 ITypeInfo_Release(
other);
1934 ITypeInfo_Release(
other);
2001 for(
i = 0;
i < tdesc->u.lpadesc->cDims; ++
i)
2002 *
size += tdesc->u.lpadesc->rgbounds[
i].cElements;
2011 FIXME(
"Unsized VT: 0x%x\n", tdesc->vt);
2038 ERR(
"seek beyond end (%d/%d)\n", where, pcx->
length );
2048 TRACE_(
typelib)(
"pos=0x%08x len=0x%08x 0x%08x 0x%08x 0x%08x\n",
2095 guid->offset = offs;
2140 int offs = 0, lengthInChars;
2153 len_piece = (len_piece + 4) & ~0x3;
2162 string, -1,
NULL, 0);
2163 if (!lengthInChars) {
2227 switch (
V_VT(pVar)){
2289 FIXME(
"VARTYPE %d is not supported, setting pointer to NULL\n",
2334 return (invkind == INVOKE_PROPERTYGET ||
2335 invkind == INVOKE_PROPERTYPUT ||
2336 invkind == INVOKE_PROPERTYPUTREF);
2372 int infolen, nameoffset, reclength,
i;
2385 for (
i = 0;
i < cFuncs ;
i++ )
2391 offset + infolen + (cFuncs + cVars +
i + 1) *
sizeof(
INT));
2396 reclength &= 0xffff;
2402 if (pFuncRec->
FKCCIC & 0x1000)
2413 if (pFuncRec->
FKCCIC & 0x2000 )
2416 ERR(
"ordinal 0x%08x invalid, IS_INTRESOURCE is false\n", pFuncRec->
oEntry);
2435 ptfd->funcdesc.funckind = (pFuncRec->
FKCCIC) & 0x7;
2436 ptfd->funcdesc.invkind = (pFuncRec->
FKCCIC) >> 3 & 0xF;
2437 ptfd->funcdesc.callconv = (pFuncRec->
FKCCIC) >> 8 & 0xF;
2438 ptfd->funcdesc.cParams = pFuncRec->
nrargs ;
2439 ptfd->funcdesc.cParamsOpt = pFuncRec->
nroargs ;
2441 ptfd->funcdesc.wFuncFlags =
LOWORD(pFuncRec->
Flags) ;
2445 if ((nameoffset == -1) && (
i > 0) &&
2448 ptfd->Name = ptfd_prev->
Name;
2454 &ptfd->funcdesc.elemdescFunc.tdesc);
2462 ptfd->funcdesc.lprgelemdescParam =
2463 heap_alloc_zero(pFuncRec->
nrargs * (
sizeof(ELEMDESC) +
sizeof(PARAMDESCEX)));
2470 for (
j = 0 ;
j < pFuncRec->
nrargs ;
j++ )
2472 ELEMDESC *elemdesc = &ptfd->funcdesc.lprgelemdescParam[
j];
2478 elemdesc->u.paramdesc.wParamFlags = paraminfo.
Flags;
2481 if (paraminfo.
oName != -1)
2482 ptfd->pParamDesc[
j].Name =
2487 if ( (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) &&
2488 (pFuncRec->
FKCCIC & 0x1000) )
2490 INT* pInt = (
INT *)((
char *)pFuncRec +
2494 PARAMDESC* pParamDesc = &elemdesc->u.paramdesc;
2496 pParamDesc->pparamdescex = (PARAMDESCEX*)(ptfd->funcdesc.lprgelemdescParam+pFuncRec->
nrargs)+
j;
2497 pParamDesc->pparamdescex->cBytes =
sizeof(PARAMDESCEX);
2503 elemdesc->u.paramdesc.pparamdescex =
NULL;
2508 pFuncRec->
FKCCIC & 0x80 )
2512 &ptfd->pParamDesc[
j].custdata_list);
2521 recoffset + reclength - ((pFuncRec->
nrargs -
j - 1)
2527 ptfd->funcdesc.cScodes = 0 ;
2528 ptfd->funcdesc.lprgscode =
NULL ;
2532 recoffset += reclength;
2540 int infolen, nameoffset, reclength;
2552 ((cFuncs+cVars)*2+cFuncs + 1)*
sizeof(
INT));
2554 for(
i=0;
i<cVars;
i++, ++ptvd){
2557 offset + infolen + (2*cFuncs + cVars +
i + 1) *
sizeof(
INT));
2576 offset + infolen + (cFuncs +
i + 1) *
sizeof(
INT));
2580 &ptvd->
vardesc.elemdescVar.tdesc);
2582 if(pVarRec->
VarKind == VAR_CONST ){
2588 recoffset += reclength;
2621 switch(
info->tdescAlias->vt){
2629 info->typeattr.cbSizeInstance =
sizeof(
void*);
2630 info->typeattr.cbAlignment =
sizeof(
void*);
2638 info->typeattr.cbAlignment = 8;
2640 if(
info->typeattr.cbSizeInstance <
sizeof(
void*))
2641 info->typeattr.cbAlignment =
info->typeattr.cbSizeInstance;
2643 info->typeattr.cbAlignment =
sizeof(
void*);
2649 info->typeattr.cbSizeInstance =
sizeof(
void*);
2650 info->typeattr.cbAlignment =
sizeof(
void*);
2724 if(ptiRet->
typeattr.cImplTypes >0 ) {
2765 INT16 len_str, len_piece;
2766 int offs = 0, lengthInChars;
2776 len_piece = len_str +
sizeof(
INT16);
2778 len_piece = (len_piece + 4) & ~0x3;
2784 string[len_str] =
'\0';
2787 string, -1,
NULL, 0);
2788 if (!lengthInChars) {
2813 while (offs < pcx->pTblDir->pImpInfo.length) {
2827 ref->reference = offs;
2828 ref->pImpTLInfo = pImpLib;
2836 ERR(
"Cannot find a reference\n");
2837 ref->reference = -1;
2841 offs +=
sizeof(impinfo);
2858 0, 0, { (
DWORD_PTR)(__FILE__
": typelib loader cache") }
2883 IUnknown_AddRef(iface);
2902 if (
This->typelib_global)
2939 static const WCHAR TYPELIBW[] = {
'T',
'Y',
'P',
'E',
'L',
'I',
'B',0};
2941 if (
This->typelib_resource)
2944 if (
This->typelib_global)
2948 if (
This->typelib_base)
2951 *ppBase =
This->typelib_base;
2952 *ppFile = &
This->IUnknown_iface;
2958 TRACE(
"No TYPELIB resource found\n");
2983 IUnknown_AddRef(iface);
3024 if (
sizeof(mzh) !=
LZRead( lzfd, (
LPSTR)&mzh,
sizeof(mzh) ) )
3030 if ( 2 !=
LZRead( lzfd, magic, 2 ) )
3035 if ( magic[0] ==
'N' && magic[1] ==
'E' )
3037 if ( magic[0] ==
'P' && magic[1] ==
'E' )
3041 WARN(
"Can't handle %s files.\n", magic );
3062 if (
sizeof(nehd) !=
LZRead( lzfd, (
LPSTR)&nehd,
sizeof(nehd) ) )
return FALSE;
3067 TRACE(
"No resources in NE dll\n" );
3073 if ( !resTab )
return FALSE;
3076 if ( resTabSize !=
LZRead( lzfd, (
char*)resTab, resTabSize ) )
3090 if (!(typeInfo->
type_id & 0x8000))
3095 typeInfo = (
NE_TYPEINFO *)((
char *)(typeInfo + 1) +
3104 if (typeInfo->
type_id ==
id)
goto found_type;
3105 typeInfo = (
NE_TYPEINFO *)((
char *)(typeInfo + 1) +
3109 TRACE(
"No typeid entry found for %p\n",
typeid );
3121 BYTE *
p = resTab + nameInfo->
id;
3122 if (nameInfo->
id & 0x8000)
continue;
3130 if (nameInfo->
id ==
id)
goto found_name;
3132 TRACE(
"No resid entry found for %p\n",
typeid );
3138 if ( resLen ) *resLen = nameInfo->
length << *(
WORD *)resTab;
3139 if ( resOff ) *resOff = nameInfo->
offset << *(
WORD *)resTab;
3166 if( !
This->typelib_base )
3173 *ppBase =
This->typelib_base;
3175 *ppFile = &
This->IUnknown_iface;
3181 if( lzfd >= 0)
LZClose( lzfd );
3205 IUnknown_AddRef(iface);
3224 if (
This->typelib_base)
3263 if(
This->typelib_base)
3267 *ppBase =
This->typelib_base;
3268 *ppFile = &
This->IUnknown_iface;
3274 IUnknown_Release(&
This->IUnknown_iface);
3285#define SLTG_SIGNATURE 0x47544c53
3293 DWORD dwTLBLength = 0;
3300 if(index_str && *++index_str !=
'\0')
3304 if(*end_ptr ==
'\0')
3323 pszPath[
len] =
'\\';
3364 TRACE(
"cache hit\n");
3365 *ppTypeLib = &
entry->ITypeLib2_iface;
3366 ITypeLib2_AddRef(*ppTypeLib);
3382 if (dwTLBLength >= 4)
3391 FIXME(
"Header type magic 0x%08x not supported.\n",dwSignature);
3397 IUnknown_Release(
pFile);
3403 TRACE(
"adding to cache\n");
3434 if (!pTypeLibImpl)
return NULL;
3439 pTypeLibImpl->
ref = 1;
3449 return pTypeLibImpl;
3466 TRACE(
"%p, TLB length = %d\n", pLib, dwTLBLength);
3469 if (!pTypeLibImpl)
return NULL;
3475 cx.pLibInfo = pTypeLibImpl;
3476 cx.length = dwTLBLength;
3483 FIXME(
"Header type magic 0x%08x not supported.\n",tlbHeader.
magic1);
3494 TRACE(
"read segment directory (at %d)\n",lPSegDir);
3496 cx.pTblDir = &tlbSegDir;
3501 ERR(
"cannot find the table directory, ptr=0x%x\n",lPSegDir);
3521 pTypeLibImpl->
lcid = tlbHeader.
lcid;
3551 pTypeLibImpl->
pTypeDesc = heap_alloc_zero( cTD *
sizeof(TYPEDESC));
3589 pTypeLibImpl->
pTypeDesc[
i].u.lpadesc->tdescElem =
cx.pLibInfo->pTypeDesc[td[0]/(2*
sizeof(
INT))];
3591 pTypeLibImpl->
pTypeDesc[
i].u.lpadesc->cDims = td[2];
3593 for(
j = 0;
j<td[2];
j++)
3604 ERR(
"didn't find array description data\n");
3620 pImpLib = heap_alloc_zero(
sizeof(
TLBImpLib));
3665 TLB_fix_32on64_typeinfo(pTypeLibImpl->
typeinfos[
i]);
3669 TRACE(
"(%p)\n", pTypeLibImpl);
3685 guid->Data4[0] =
s >> 8;
3686 guid->Data4[1] =
s & 0xff;
3689 for(
i = 0;
i < 6;
i++) {
3711 if (!(
bits->current & 0xff))
3714 bits->current = (*
bits->buffer << 8) | 1;
3719 if (
bits->current & 0x8000)
3725 p =
table + (*(
p + 2) | (*(
p + 1) << 8));
3728 bits->current <<= 1;
3750 if (!stream_length)
return NULL;
3753 bits.length = stream_length;
3785 if(bytelen == 0xffff)
return 2;
3803 if(bytelen == 0xffff)
return 2;
3806 (*str)[bytelen] =
'\0';
3829 char *
ptr = pLibBlk;
3833 FIXME(
"libblk magic = %04x\n",
w);
3839 FIXME(
"LibBlk.res06 = %04x. Assumung string and skipping\n",
w);
3875 return ptr - (
char*)pLibBlk;
3886 HREFTYPE *typelib_ref)
3888 if(
table && typeinfo_ref < table->
num)