Пример #1
0
 /// <inheritdoc />
 public override string ToString()
 {
     return(nativeType.ToString());
 }
Пример #2
0
        private void WriteNativeType(NativeType nativeType, MarshalInfo?marshalInfo = null)
        {
            switch (nativeType)
            {
            case NativeType.None:
                break;

            case NativeType.Boolean:
                _output.Write("bool");
                break;

            case NativeType.I1:
                _output.Write("int8");
                break;

            case NativeType.U1:
                _output.Write("unsigned int8");
                break;

            case NativeType.I2:
                _output.Write("int16");
                break;

            case NativeType.U2:
                _output.Write("unsigned int16");
                break;

            case NativeType.I4:
                _output.Write("int32");
                break;

            case NativeType.U4:
                _output.Write("unsigned int32");
                break;

            case NativeType.I8:
                _output.Write("int64");
                break;

            case NativeType.U8:
                _output.Write("unsigned int64");
                break;

            case NativeType.R4:
                _output.Write("float32");
                break;

            case NativeType.R8:
                _output.Write("float64");
                break;

            case NativeType.LPStr:
                _output.Write("lpstr");
                break;

            case NativeType.Int:
                _output.Write("int");
                break;

            case NativeType.UInt:
                _output.Write("unsigned int");
                break;

            case NativeType.Func:
                goto default;     // ??

            case NativeType.Array:
                var ami = marshalInfo as ArrayMarshalInfo;
                if (ami == null)
                {
                    goto default;
                }
                if (ami.ElementType != NativeType.Max)
                {
                    WriteNativeType(ami.ElementType);
                }
                _output.Write('[');
                if (ami.SizeParameterMultiplier == 0)
                {
                    _output.Write(ami.Size.ToString());
                }
                else
                {
                    if (ami.Size >= 0)
                    {
                        _output.Write(ami.Size.ToString());
                    }
                    _output.Write(" + ");
                    _output.Write(ami.SizeParameterIndex.ToString());
                }
                _output.Write(']');
                break;

            case NativeType.Currency:
                _output.Write("currency");
                break;

            case NativeType.BStr:
                _output.Write("bstr");
                break;

            case NativeType.LPWStr:
                _output.Write("lpwstr");
                break;

            case NativeType.LPTStr:
                _output.Write("lptstr");
                break;

            case NativeType.FixedSysString:
                _output.Write("fixed sysstring[{0}]", (marshalInfo as FixedSysStringMarshalInfo)?.Size ?? 0);
                break;

            case NativeType.IUnknown:
                _output.Write("iunknown");
                break;

            case NativeType.IDispatch:
                _output.Write("idispatch");
                break;

            case NativeType.Struct:
                _output.Write("struct");
                break;

            case NativeType.IntF:
                _output.Write("interface");
                break;

            case NativeType.SafeArray:
                _output.Write("safearray ");
                var sami = marshalInfo as SafeArrayMarshalInfo;
                if (sami != null)
                {
                    switch (sami.ElementType)
                    {
                    case VariantType.None:
                        break;

                    case VariantType.I2:
                        _output.Write("int16");
                        break;

                    case VariantType.I4:
                        _output.Write("int32");
                        break;

                    case VariantType.R4:
                        _output.Write("float32");
                        break;

                    case VariantType.R8:
                        _output.Write("float64");
                        break;

                    case VariantType.CY:
                        _output.Write("currency");
                        break;

                    case VariantType.Date:
                        _output.Write("date");
                        break;

                    case VariantType.BStr:
                        _output.Write("bstr");
                        break;

                    case VariantType.Dispatch:
                        _output.Write("idispatch");
                        break;

                    case VariantType.Error:
                        _output.Write("error");
                        break;

                    case VariantType.Bool:
                        _output.Write("bool");
                        break;

                    case VariantType.Variant:
                        _output.Write("variant");
                        break;

                    case VariantType.Unknown:
                        _output.Write("iunknown");
                        break;

                    case VariantType.Decimal:
                        _output.Write("decimal");
                        break;

                    case VariantType.I1:
                        _output.Write("int8");
                        break;

                    case VariantType.UI1:
                        _output.Write("unsigned int8");
                        break;

                    case VariantType.UI2:
                        _output.Write("unsigned int16");
                        break;

                    case VariantType.UI4:
                        _output.Write("unsigned int32");
                        break;

                    case VariantType.Int:
                        _output.Write("int");
                        break;

                    case VariantType.UInt:
                        _output.Write("unsigned int");
                        break;

                    default:
                        _output.Write(sami.ElementType.ToString());
                        break;
                    }
                }
                break;

            case NativeType.FixedArray:
                _output.Write("fixed array");
                var fami = marshalInfo as FixedArrayMarshalInfo;
                if (fami != null)
                {
                    _output.Write("[{0}]", fami.Size);
                    if (fami.ElementType != NativeType.None)
                    {
                        _output.Write(' ');
                        WriteNativeType(fami.ElementType);
                    }
                }
                break;

            case NativeType.ByValStr:
                _output.Write("byvalstr");
                break;

            case NativeType.ANSIBStr:
                _output.Write("ansi bstr");
                break;

            case NativeType.TBStr:
                _output.Write("tbstr");
                break;

            case NativeType.VariantBool:
                _output.Write("variant bool");
                break;

            case NativeType.ASAny:
                _output.Write("as any");
                break;

            case NativeType.LPStruct:
                _output.Write("lpstruct");
                break;

            case NativeType.CustomMarshaler:
                var cmi = marshalInfo as CustomMarshalInfo;
                if (cmi == null)
                {
                    goto default;
                }
                _output.Write("custom(\"{0}\", \"{1}\"",
                              TextWriterTokenWriter.ConvertString(cmi.ManagedType.FullName),
                              TextWriterTokenWriter.ConvertString(cmi.Cookie));
                if (cmi.Guid != Guid.Empty || !string.IsNullOrEmpty(cmi.UnmanagedType))
                {
                    _output.Write(", \"{0}\", \"{1}\"", cmi.Guid.ToString(), TextWriterTokenWriter.ConvertString(cmi.UnmanagedType));
                }
                _output.Write(')');
                break;

            case NativeType.Error:
                _output.Write("error");
                break;

            default:
                _output.Write(nativeType.ToString());
                break;
            }
        }
 private void WriteNativeType(NativeType nativeType, MarshalInfo marshalInfo = null)
 {
     switch (nativeType)
     {
         case NativeType.None:
             break;
         case NativeType.Boolean:
             WriteKeyword("bool");
             break;
         case NativeType.I1:
             WriteKeyword("int8");
             break;
         case NativeType.U1:
             WriteKeyword("unsigned int8");
             break;
         case NativeType.I2:
             WriteKeyword("int16");
             break;
         case NativeType.U2:
             WriteKeyword("unsigned int16");
             break;
         case NativeType.I4:
             WriteKeyword("int32");
             break;
         case NativeType.U4:
             WriteKeyword("unsigned int32");
             break;
         case NativeType.I8:
             WriteKeyword("int64");
             break;
         case NativeType.U8:
             WriteKeyword("unsigned int64");
             break;
         case NativeType.R4:
             WriteKeyword("float32");
             break;
         case NativeType.R8:
             WriteKeyword("float64");
             break;
         case NativeType.LPStr:
             WriteKeyword("lpstr");
             break;
         case NativeType.Int:
             WriteKeyword("int");
             break;
         case NativeType.UInt:
             WriteKeyword("unsigned int");
             break;
         case NativeType.Func:
             goto default;
         case NativeType.Array:
             ArrayMarshalInfo ami = (ArrayMarshalInfo)marshalInfo;
             if (ami == null)
                 goto default;
             if (ami.ElementType != NativeType.Max)
                 WriteNativeType(ami.ElementType);
             WriteToken("[");
             if (ami.SizeParameterMultiplier == 0)
             {
                 WriteLiteral(ami.Size.ToString());
             }
             else
             {
                 if (ami.Size >= 0)
                     WriteLiteral(ami.Size.ToString());
                 WriteSpace();
                 WriteToken("+");
                 WriteSpace();
                 WriteLiteral(ami.SizeParameterIndex.ToString());
             }
             WriteToken("]");
             break;
         case NativeType.Currency:
             WriteKeyword("currency");
             break;
         case NativeType.BStr:
             WriteKeyword("bstr");
             break;
         case NativeType.LPWStr:
             WriteKeyword("lpwstr");
             break;
         case NativeType.LPTStr:
             WriteKeyword("lptstr");
             break;
         case NativeType.FixedSysString:
             WriteKeyword(string.Format("fixed sysstring[{0}]", ((FixedSysStringMarshalInfo)marshalInfo).Size));
             break;
         case NativeType.IUnknown:
             WriteKeyword("iunknown");
             break;
         case NativeType.IDispatch:
             WriteKeyword("idispatch");
             break;
         case NativeType.Struct:
             WriteKeyword("struct");
             break;
         case NativeType.IntF:
             WriteKeyword("interface");
             break;
         case NativeType.SafeArray:
             WriteKeyWordPostSpace("safearray");
             SafeArrayMarshalInfo sami = marshalInfo as SafeArrayMarshalInfo;
             if (sami != null)
             {
                 switch (sami.ElementType)
                 {
                     case VariantType.None:
                         break;
                     case VariantType.I2:
                         WriteKeyword("int16");
                         break;
                     case VariantType.I4:
                         WriteKeyword("int32");
                         break;
                     case VariantType.R4:
                         WriteKeyword("float32");
                         break;
                     case VariantType.R8:
                         WriteKeyword("float64");
                         break;
                     case VariantType.CY:
                         WriteKeyword("currency");
                         break;
                     case VariantType.Date:
                         WriteKeyword("date");
                         break;
                     case VariantType.BStr:
                         WriteKeyword("bstr");
                         break;
                     case VariantType.Dispatch:
                         WriteKeyword("idispatch");
                         break;
                     case VariantType.Error:
                         WriteKeyword("error");
                         break;
                     case VariantType.Bool:
                         WriteKeyword("bool");
                         break;
                     case VariantType.Variant:
                         WriteKeyword("variant");
                         break;
                     case VariantType.Unknown:
                         WriteKeyword("iunknown");
                         break;
                     case VariantType.Decimal:
                         WriteKeyword("decimal");
                         break;
                     case VariantType.I1:
                         WriteKeyword("int8");
                         break;
                     case VariantType.UI1:
                         WriteKeyword("unsigned int8");
                         break;
                     case VariantType.UI2:
                         WriteKeyword("unsigned int16");
                         break;
                     case VariantType.UI4:
                         WriteKeyword("unsigned int32");
                         break;
                     case VariantType.Int:
                         WriteKeyword("int");
                         break;
                     case VariantType.UInt:
                         WriteKeyword("unsigned int");
                         break;
                     default:
                         WriteKeyword(sami.ElementType.ToString());
                         break;
                 }
             }
             break;
         case NativeType.FixedArray:
             WriteKeyword("fixed array");
             FixedArrayMarshalInfo fami = marshalInfo as FixedArrayMarshalInfo;
             if (fami != null)
             {
                 WriteToken("[");
                 WriteLiteral(fami.Size.ToString());
                 WriteToken("]");
                 if (fami.ElementType != NativeType.None)
                 {
                     WriteSpace();
                     WriteNativeType(fami.ElementType);
                 }
             }
             break;
         case NativeType.ByValStr:
             WriteKeyword("byvalstr");
             break;
         case NativeType.ANSIBStr:
             WriteKeyword("ansi bstr");
             break;
         case NativeType.TBStr:
             WriteKeyword("tbstr");
             break;
         case NativeType.VariantBool:
             WriteKeyword("variant bool");
             break;
         case NativeType.ASAny:
             WriteKeyword("as any");
             break;
         case NativeType.LPStruct:
             WriteKeyword("lpstruct");
             break;
         case NativeType.CustomMarshaler:
             CustomMarshalInfo cmi = marshalInfo as CustomMarshalInfo;
             if (cmi == null)
                 goto default;
             WriteKeyword("custom");
             WriteToken("(");
             WriteLiteralInQuotes(ConvertString(cmi.ManagedType.FullName));
             WriteTokenPostSpace(",");
             WriteLiteralInQuotes(ConvertString(cmi.Cookie));
             if (cmi.Guid != Guid.Empty || !string.IsNullOrEmpty(cmi.UnmanagedType))
             {
                 WriteTokenPostSpace(",");
                 WriteLiteralInQuotes(cmi.Guid.ToString());
                 WriteTokenPostSpace(",");
                 WriteLiteralInQuotes(ConvertString(cmi.UnmanagedType));
             }
             WriteToken(")");
             break;
         case NativeType.Error:
             WriteKeyword("error");
             break;
         default:
             WriteKeyword(nativeType.ToString());
             break;
     }
 }