- Timestamp:
- May 31, 2001, 9:14:00 AM (24 years ago)
- Location:
- trunk/src/oleaut32
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/oleaut32/asmutil.asm
r5840 r5845 1 ; $Id: asmutil.asm,v 1. 1 2001-05-30 17:43:38sandervl Exp $1 ; $Id: asmutil.asm,v 1.2 2001-05-31 07:14:00 sandervl Exp $ 2 2 3 3 ; … … 45 45 mov ebx, dword ptr [eax] 46 46 push ebx 47 addeax, 447 sub eax, 4 48 48 49 49 dec ecx … … 72 72 mov ebx, dword ptr [eax] 73 73 push ebx 74 addeax, 474 sub eax, 4 75 75 76 76 dec ecx -
trunk/src/oleaut32/itypeinfo.cpp
r5840 r5845 1 /* $Id: itypeinfo.cpp,v 1. 6 2001-05-30 17:43:38sandervl Exp $ */1 /* $Id: itypeinfo.cpp,v 1.7 2001-05-31 07:14:00 sandervl Exp $ */ 2 2 /* 3 3 * ITypeInfo interface … … 347 347 dprintf(("OLEAUT32: ITypeInfoImpl(%p)->GetRefTypeOfImplType()\n", This)); 348 348 349 if (This->pImplements.Count() < index) 349 if(index==(UINT)-1) 350 { 351 /* only valid on dual interfaces; 352 retrieve the associated TKIND_INTERFACE handle for the current TKIND_DISPATCH 353 */ 354 if( This->TypeAttr.typekind != TKIND_DISPATCH) return E_INVALIDARG; 355 356 if (This->TypeAttr.wTypeFlags & TYPEFLAG_FDISPATCHABLE && 357 This->TypeAttr.wTypeFlags & TYPEFLAG_FDUAL ) 358 { 359 *pRefType = -1; 360 } 361 else 362 { 363 if (This->pImplements.Count() == 0) return TYPE_E_ELEMENTNOTFOUND; 364 *pRefType = This->pImplements[0]->reference; 365 } 366 } 367 else 368 { 369 if (This->pImplements.Count() < index) 350 370 return TYPE_E_ELEMENTNOTFOUND; 351 371 352 *pRefType = This->pImplements[index]->reference; 372 *pRefType = This->pImplements[index]->reference; 373 } 353 374 return S_OK; 354 375 } … … 667 688 * (DWORD*) pStackPtr = * (DWORD*) pIUnk; 668 689 paramsize += sizeof(DWORD); 690 691 //reset to top 692 pStackPtr = (PBYTE)((char *)pStack + sizeof(double)*pFuncDesc->cParams); 693 pStackPtr -= 4; 669 694 670 695 /* invoke function */ … … 1049 1074 return rc; 1050 1075 } 1076 else 1077 if (hRefType == -1 && 1078 (((ITypeInfoImpl*) This)->TypeAttr.typekind == TKIND_DISPATCH) && 1079 (((ITypeInfoImpl*) This)->TypeAttr.wTypeFlags & TYPEFLAG_FDUAL)) 1080 { 1081 /* when we meet a DUAL dispinterface, we must create the interface 1082 * version of it. 1083 */ 1084 ITypeInfoImpl* pTypeInfoImpl = (ITypeInfoImpl*) ITypeInfoImpl_Constructor(); 1085 1086 /* the interface version contains the same information as the dispinterface 1087 * copy the contents of the structs. 1088 */ 1089 *pTypeInfoImpl = *This; 1090 pTypeInfoImpl->ref = 1; 1091 1092 /* change the type to interface */ 1093 pTypeInfoImpl->TypeAttr.typekind = TKIND_INTERFACE; 1094 1095 *ppTInfo = (ITypeInfo*) pTypeInfoImpl; 1096 1097 ITypeInfo_AddRef((ITypeInfo*) pTypeInfoImpl); 1098 1099 return S_OK; 1100 } 1051 1101 1052 1102 /* imported type lib */
Note:
See TracChangeset
for help on using the changeset viewer.