예제 #1
0
파일: Program.cs 프로젝트: asklar/DumpWinMD
        private void WriteType(MrType t)
        {
            var name = "";

            var gargs   = t.GetGenericArguments();
            var gparams = t.GetGenericTypeParameters();

            name = GetSimpleTypeName(t, gargs, gparams);

            writer.WriteStartElement("type");
            if (t.IsArray)
            {
                writer.WriteAttributeString("array", "true");
                name = name.Replace("[]", "");
            }

            writer.WriteAttributeString("name", name);

            if (!gargs.IsEmpty)
            {
                writer.WriteAttributeString("generic", "true");
                writer.WriteStartElement("params");
                foreach (var p in gparams)
                {
                    WriteType(p);
                }
                writer.WriteEndElement();
            }
            else
            {
            }
            writer.WriteEndElement();
        }
예제 #2
0
        public static string GetCppWinRTType(MrType t)
        {
            var primitiveTypes = new Dictionary <string, string>()
            {
                { "System.String", "winrt::hstring" },
                { "System.Boolean", "bool" },
                { "System.Int32", "int32_t" },
                { "System.Int64", "int64_t" },
                { "System.Double", "double" },
                { "System.Single", "float" },
                { "System.Uri", "winrt::Windows::Foundation::Uri" },
                { "System.Object", "winrt::Windows::Foundation::IInspectable" },
            };

            if (t.GetFullName() == $"{XamlNames.XamlNamespace}.Controls.Maps.MapStyle")
            {
                // MapStyle has a bug where it doesn't support coercion from int
            }
            else if (t.IsEnum)
            {
                return("int32_t");
            }
            else if (t.GetFullName() == "System.Nullable`1")
            {
                return(GetCppWinRTType(t.GetGenericTypeParameters().First()));
            }
            if (primitiveTypes.ContainsKey(t.GetFullName()))
            {
                return(primitiveTypes[t.GetFullName()]);
            }



            return($"winrt::{t.GetFullName().Replace(".", "::")}");
        }