Files
MicrosoftIris/UIX/Microsoft/Iris/CodeModel/Cpp/DllConstructorSchema.cs
T

84 lines
3.0 KiB
C#
Raw Normal View History

2022-03-03 08:14:05 -06:00
// Decompiled with JetBrains decompiler
// Type: Microsoft.Iris.CodeModel.Cpp.DllConstructorSchema
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
// Assembly location: C:\Program Files\Zune\UIX.dll
using Microsoft.Iris.Markup;
using Microsoft.Iris.OS;
using System;
using System.Diagnostics;
namespace Microsoft.Iris.CodeModel.Cpp
{
internal class DllConstructorSchema : ConstructorSchema
{
private TypeSchema[] _parameterTypes;
private uint _id;
public DllConstructorSchema(DllTypeSchema owner, uint ID)
: base(owner)
=> _id = ID;
public bool Load(IntPtr constructor) => QueryForParameterTypes(constructor);
[Conditional("DEBUG")]
public void DEBUG_Dump()
{
string str1 = string.Empty;
if (_parameterTypes != null)
{
for (int index = 0; index < _parameterTypes.Length; ++index)
{
string str2 = "<null>";
if (_parameterTypes[index] != null)
str2 = _parameterTypes[index].Name;
str1 = string.Format("{0}{1}{2}", str1, index > 0 ? ", " : string.Empty, str2);
}
}
string.Format("0x{0:x8} {1}({2})", _id, Owner.Name, str1);
}
public override TypeSchema[] ParameterTypes => _parameterTypes;
private DllLoadResult OwnerLoadResult => (DllLoadResult)Owner.Owner;
private bool QueryForParameterTypes(IntPtr constructor)
{
bool flag1 = false;
uint count;
if (CheckNativeReturn(NativeApi.SpQueryConstructorParameterCount(constructor, out count)))
{
uint[] IDs = new uint[count];
if (CheckNativeReturn(NativeApi.SpGetConstructorParameterTypes(constructor, IDs, count)))
{
if (count > 0U)
{
_parameterTypes = new TypeSchema[count];
bool flag2 = false;
for (int index = 0; index < count; ++index)
{
TypeSchema typeSchema = DllLoadResult.MapType(IDs[index]);
if (typeSchema != null)
_parameterTypes[index] = typeSchema;
else
flag2 = true;
}
flag1 = !flag2;
}
else
{
_parameterTypes = TypeSchema.EmptyList;
flag1 = true;
}
}
}
return flag1;
}
public override object Construct(object[] parameters) => ((DllTypeSchema)Owner).Construct(_id, parameters);
private bool CheckNativeReturn(uint hr) => DllLoadResult.CheckNativeReturn(hr, "IUIXConstructor");
}
}