public static extern void New(TypeDescriptionReference **ppTDR,
                               int /* enum typelib_TypeClass */ eTypeClass,
                               /* uno.rtl.UString */ void *pTypeName);
Example #2
0
    static Type MapUnoType(TypeDescriptionReference *TD)
    {
        Type result;

        switch(TD->eTypeClass)
        {
        case TypeClass.VOID:
            result = typeof(void);
            break;
        case TypeClass.CHAR:
            result = typeof(char);
            break;
        case TypeClass.BOOLEAN:
            result = typeof(bool);
            break;
        case TypeClass.BYTE:
            result = typeof(byte);
            break;
        case TypeClass.SHORT:
            result = typeof(short);
            break;
        case TypeClass.UNSIGNED_SHORT:
            result = typeof(ushort);
            break;
        case TypeClass.LONG:
            result = typeof(int);
            break;
        case TypeClass.UNSIGNED_LONG:
            result = typeof(uint);
            break;
        case TypeClass.HYPER:
            result = typeof(long);
            break;
        case TypeClass.UNSIGNED_HYPER:
            result = typeof(ulong);
            break;
        case TypeClass.FLOAT:
            result = typeof(float);
            break;
        case TypeClass.DOUBLE:
            result = typeof(double);
            break;
        case TypeClass.STRING:
            result = typeof(string);
            break;
        case TypeClass.TYPE:
            result = typeof(Type);
            break;
        case TypeClass.ANY:
            result = typeof(uno.Any);
            break;
        case TypeClass.ENUM:
        case TypeClass.STRUCT:
        case TypeClass.EXCEPTION:
            result = Bridge.LoadCliType(TD->pTypeName);
            break;
        case TypeClass.INTERFACE:
            // special handling for XInterface, since it does not exist in cli.
            if (UString.UStringToString(TD->pTypeName) == "com.sun.star.uno.XInterface")
                result = typeof(object);
            else
                result = Bridge.LoadCliType(TD->pTypeName);
            break;
        case TypeClass.SEQUENCE:
        {
            // FIXME do something with TD here?
            TypeDescriptionReference *elementTDRef =
                ((IndirectTypeDescription *)TD)->pType;
            switch (elementTDRef->eTypeClass)
            {
            case TypeClass.CHAR:
                result = Type.GetType("System.Char[]");
                break;
            case TypeClass.BOOLEAN:
                result = Type.GetType("System.Boolean[]");
                break;
            case TypeClass.BYTE:
                result = Type.GetType("System.Byte[]");
                break;
            case TypeClass.SHORT:
                result = Type.GetType("System.Int16[]");
                break;
            case TypeClass.UNSIGNED_SHORT:
                result = Type.GetType("System.UInt16[]");
                break;
            case TypeClass.LONG:
                result = Type.GetType("System.Int32[]");
                break;
            case TypeClass.UNSIGNED_LONG:
                result = Type.GetType("System.UInt32[]");
                break;
            case TypeClass.HYPER:
                result = Type.GetType("System.Int64[]");
                break;
            case TypeClass.UNSIGNED_HYPER:
                result = Type.GetType("System.UInt64[]");
                break;
            case TypeClass.FLOAT:
                result = Type.GetType("System.Single[]");
                break;
            case TypeClass.DOUBLE:
                result = Type.GetType("System.Double[]");
                break;
            case TypeClass.STRING:
                result = Type.GetType("System.String[]");
                break;
            case TypeClass.TYPE:
                result = Type.GetType("System.Type[]");
                break;
            case TypeClass.ANY:
            case TypeClass.ENUM:
            case TypeClass.EXCEPTION:
            case TypeClass.STRUCT:
            case TypeClass.INTERFACE:
            case TypeClass.SEQUENCE:
                result = Bridge.LoadCliType(TD->pTypeName);
                break;
            default:
                // FIXME can't happen
                result = null;
                break;
            }
            break;
        }
        default:
            // FIXME can't happen
            result = null;
            break;
        }
        return result;
    }