oleaut32: Implement the 0x08 flag in SLTG_DoVars.
It means that the data is stored directly in pItem->byte_offs instead of the byte offset pointed to by it.
This commit is contained in:
parent
d76de4eede
commit
45989a1ff1
|
@ -3099,7 +3099,6 @@ static void SLTG_DoVars(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI, unsign
|
||||||
SLTG_Variable *pItem;
|
SLTG_Variable *pItem;
|
||||||
unsigned short i;
|
unsigned short i;
|
||||||
WORD *pType;
|
WORD *pType;
|
||||||
char buf[300];
|
|
||||||
|
|
||||||
for(pItem = (SLTG_Variable *)pFirstItem, i = 0; i < cVars;
|
for(pItem = (SLTG_Variable *)pFirstItem, i = 0; i < cVars;
|
||||||
pItem = (SLTG_Variable *)(pBlk + pItem->next), i++) {
|
pItem = (SLTG_Variable *)(pBlk + pItem->next), i++) {
|
||||||
|
@ -3119,6 +3118,7 @@ static void SLTG_DoVars(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI, unsign
|
||||||
else
|
else
|
||||||
(*ppVarDesc)->Name = TLB_MultiByteToBSTR(pItem->name + pNameTable);
|
(*ppVarDesc)->Name = TLB_MultiByteToBSTR(pItem->name + pNameTable);
|
||||||
|
|
||||||
|
TRACE_(typelib)("name: %s\n", debugstr_w((*ppVarDesc)->Name));
|
||||||
TRACE_(typelib)("byte_offs = 0x%x\n", pItem->byte_offs);
|
TRACE_(typelib)("byte_offs = 0x%x\n", pItem->byte_offs);
|
||||||
TRACE_(typelib)("memid = 0x%x\n", pItem->memid);
|
TRACE_(typelib)("memid = 0x%x\n", pItem->memid);
|
||||||
|
|
||||||
|
@ -3132,8 +3132,11 @@ static void SLTG_DoVars(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI, unsign
|
||||||
(*ppVarDesc)->vardesc.u.lpvarValue = HeapAlloc(GetProcessHeap(), 0,
|
(*ppVarDesc)->vardesc.u.lpvarValue = HeapAlloc(GetProcessHeap(), 0,
|
||||||
sizeof(VARIANT));
|
sizeof(VARIANT));
|
||||||
V_VT((*ppVarDesc)->vardesc.u.lpvarValue) = VT_INT;
|
V_VT((*ppVarDesc)->vardesc.u.lpvarValue) = VT_INT;
|
||||||
V_UNION((*ppVarDesc)->vardesc.u.lpvarValue, intVal) =
|
if (pItem->flags & 0x08)
|
||||||
*(INT*)(pBlk + pItem->byte_offs);
|
V_UNION((*ppVarDesc)->vardesc.u.lpvarValue, intVal) = pItem->byte_offs;
|
||||||
|
else
|
||||||
|
V_UNION((*ppVarDesc)->vardesc.u.lpvarValue, intVal) =
|
||||||
|
*(INT*)(pBlk + pItem->byte_offs);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
TRACE_(typelib)("VAR_PERINSTANCE\n");
|
TRACE_(typelib)("VAR_PERINSTANCE\n");
|
||||||
|
@ -3152,13 +3155,17 @@ static void SLTG_DoVars(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI, unsign
|
||||||
else
|
else
|
||||||
pType = (WORD*)(pBlk + pItem->type);
|
pType = (WORD*)(pBlk + pItem->type);
|
||||||
|
|
||||||
if (pItem->flags & ~0xd2)
|
if (pItem->flags & ~0xda)
|
||||||
FIXME_(typelib)("unhandled flags = %02x\n", pItem->flags & ~0xd2);
|
FIXME_(typelib)("unhandled flags = %02x\n", pItem->flags & ~0xda);
|
||||||
|
|
||||||
SLTG_DoElem(pType, pBlk,
|
SLTG_DoElem(pType, pBlk,
|
||||||
&(*ppVarDesc)->vardesc.elemdescVar, ref_lookup);
|
&(*ppVarDesc)->vardesc.elemdescVar, ref_lookup);
|
||||||
|
|
||||||
dump_TypeDesc(&(*ppVarDesc)->vardesc.elemdescVar.tdesc, buf);
|
if (TRACE_ON(typelib)) {
|
||||||
|
char buf[300];
|
||||||
|
dump_TypeDesc(&(*ppVarDesc)->vardesc.elemdescVar.tdesc, buf);
|
||||||
|
TRACE_(typelib)("elemdescVar: %s\n", buf);
|
||||||
|
}
|
||||||
|
|
||||||
bstrPrevName = (*ppVarDesc)->Name;
|
bstrPrevName = (*ppVarDesc)->Name;
|
||||||
ppVarDesc = &((*ppVarDesc)->next);
|
ppVarDesc = &((*ppVarDesc)->next);
|
||||||
|
|
|
@ -576,7 +576,7 @@ typedef struct {
|
||||||
BYTE flags;
|
BYTE flags;
|
||||||
WORD next;
|
WORD next;
|
||||||
WORD name;
|
WORD name;
|
||||||
WORD byte_offs; /* pos in struct, or offset to const type */
|
WORD byte_offs; /* pos in struct, or offset to const type or const data (if flags & 0x08) */
|
||||||
WORD type; /* if flags & 0x02 this is the type, else offset to type */
|
WORD type; /* if flags & 0x02 this is the type, else offset to type */
|
||||||
DWORD memid;
|
DWORD memid;
|
||||||
WORD helpcontext; /* ?? */
|
WORD helpcontext; /* ?? */
|
||||||
|
|
Loading…
Reference in New Issue