public void GetVarDesc(int index, out IntPtr ppVarDesc) { // Fail BEFORE allocating the handle to avoid leaks. If the real COM object fails in this method // and doesn't return the handle or clean it up itself there's not much we can do to avoid the leak. _faultInjector.FailurePointThrow(MockTypeLibrariesFailurePoints.ITypeInfo_GetVarDesc); ppVarDesc = _memoryHelper.AllocateHandle(Marshal.SizeOf <VARDESC>()); _memoryHelper.EnterSubAllocationScope(ppVarDesc); VARDESC varDesc = new VARDESC(); varDesc.elemdescVar.tdesc = _definedVariables[index].CreateTypeDesc(new IntPtr(index + s_HREF_VARS_OFFSET), _memoryHelper); _memoryHelper.ExitSubAllocationScope(); Marshal.StructureToPtr(varDesc, ppVarDesc, false); }