using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.ComponentModel; using System.Reflection; namespace AppxPackage { [Serializable] public sealed class Ref { private T _value; public Ref () { _value = default (T); } public Ref (T value) { _value = value; } /// /// 模拟 & 引用访问 /// public T Value { get { return _value; } set { _value = value; } } /// /// 直接赋值(像 *ref = value) /// public void Set (T value) { _value = value; } /// /// 取值(像 value = *ref) /// public T Get () { return _value; } public override string ToString () { return _value == null ? string.Empty : _value.ToString (); } public override int GetHashCode () { return _value == null ? 0 : _value.GetHashCode (); } public override bool Equals (object obj) { if (ReferenceEquals (this, obj)) return true; if (obj is Ref) return Equals (_value, ((Ref)obj)._value); return Equals (_value, obj); } public static implicit operator T (Ref r) { return r == null ? default (T) : r._value; } public static implicit operator Ref(T value) { return new Ref (value); } } } namespace AppxPackage.Info { public enum Architecture { x86 = 0, ARM = 5, x64 = 9, Neutral = 11, ARM64 = 12, Unknown = ushort.MaxValue }; public enum PackageType { Unknown = 0, Appx = 1, Bundle = 2 }; public enum PackageRole { Unknown = 0, Application = 1, Framework = 2, Resource = 3 }; public interface IIdentity { string Name { get; } string Publisher { get; } string FamilyName { get; } string FullName { get; } string ResourceId { get; } DataUtils.Version Version { get; } List ProcessArchitecture { get; } } public interface IProperties { string DisplayName { get; } string Description { get; } string Publisher { get; } string Logo { get; } string LogoBase64 { get; } bool Framework { get; } bool ResourcePackage { get; } } public interface ICapabilities { List Capabilities { get; } List DeviceCapabilities { get; } } public class DependencyInfo { public string Name { get; private set; } = ""; public string Publisher { get; private set; } = ""; public DataUtils.Version Version { get; private set; } = new DataUtils.Version (); public DependencyInfo (string name, string publisher, DataUtils.Version ver) { Name = name; Publisher = publisher; Version = ver; } public DependencyInfo (string name, DataUtils.Version ver): this (name, "", ver) { } public DependencyInfo () { } } public enum DXFeatureLevel { Unspecified = 0, Level9 = 0x1, Level10 = 0x2, Level11 = 0x4, Level12 = 0x8 } public interface IResources { List Languages { get; } List Languages_LCID { get; } List Scales { get; } List DXFeatures { get; } } public interface IPrerequisites { DataUtils.Version OSMinVersion { get; } DataUtils.Version OSMaxVersionTested { get; } string OSMinVersionDescription { get; } string OSMaxVersionDescription { get; } } [Serializable] [StructLayout (LayoutKind.Sequential)] public struct HRESULT: IEquatable { private readonly int _value; public HRESULT (int value) { _value = value; } public int Value { get { return _value; } } public bool Succeeded { get { return _value >= 0; } } public bool Failed { get { return _value < 0; } } public void ThrowIfFailed () { if (Failed) Marshal.ThrowExceptionForHR (_value); } public Exception GetException () { return Failed ? Marshal.GetExceptionForHR (_value) : null; } public override string ToString () { return string.Format ("HRESULT 0x{0:X8}", _value); } public override int GetHashCode () { return _value; } public override bool Equals (object obj) { if (obj is HRESULT) return Equals ((HRESULT)obj); return false; } public bool Equals (HRESULT other) { return _value == other._value; } public static implicit operator int (HRESULT hr) { return hr._value; } public static implicit operator HRESULT (int value) { return new HRESULT (value); } public static bool operator == (HRESULT a, HRESULT b) { return a._value == b._value; } public static bool operator != (HRESULT a, HRESULT b) { return a._value != b._value; } public static bool operator >= (HRESULT a, int value) { return a._value >= value; } public static bool operator <= (HRESULT a, int value) { return a._value <= value; } public static bool operator > (HRESULT a, int value) { return a._value > value; } public static bool operator < (HRESULT a, int value) { return a._value < value; } } public static class JSHelper { public static void CallJS (object jsFunc, params object [] args) { if (jsFunc == null) return; try { // 这里固定第一个参数为 thisArg(比如 1) object [] realArgs = new object [args.Length + 1]; realArgs [0] = jsFunc; // thisArg Array.Copy (args, 0, realArgs, 1, args.Length); jsFunc.GetType ().InvokeMember ( "call", BindingFlags.InvokeMethod, null, jsFunc, realArgs ); } catch { // ignore errors in callback invocation } } } }