Ejemplo n.º 1
0
        internal static string GetMethodSignatureFromFuncDesc(
            ITypeInfo typeinfo,
            System.Runtime.InteropServices.ComTypes.FUNCDESC funcdesc,
            bool isPropertyPut)
        {
            StringBuilder stringBuilder    = new StringBuilder();
            string        nameFromFuncDesc = ComUtil.GetNameFromFuncDesc(typeinfo, funcdesc);

            if (!isPropertyPut)
            {
                string stringFromTypeDesc = ComUtil.GetStringFromTypeDesc(typeinfo, funcdesc.elemdescFunc.tdesc);
                stringBuilder.Append(stringFromTypeDesc + " ");
            }
            stringBuilder.Append(nameFromFuncDesc);
            stringBuilder.Append(" (");
            IntPtr lprgelemdescParam = funcdesc.lprgelemdescParam;
            int    num1 = Marshal.SizeOf(typeof(System.Runtime.InteropServices.ComTypes.ELEMDESC));

            for (int index = 0; index < (int)funcdesc.cParams; ++index)
            {
                System.Runtime.InteropServices.ComTypes.ELEMDESC elemdesc = new System.Runtime.InteropServices.ComTypes.ELEMDESC();
                int num2 = index * num1;
                elemdesc = (System.Runtime.InteropServices.ComTypes.ELEMDESC)Marshal.PtrToStructure(IntPtr.Size != 4 ? (IntPtr)(lprgelemdescParam.ToInt64() + (long)num2) : (IntPtr)(lprgelemdescParam.ToInt32() + num2), typeof(System.Runtime.InteropServices.ComTypes.ELEMDESC));
                string stringFromTypeDesc = ComUtil.GetStringFromTypeDesc(typeinfo, elemdesc.tdesc);
                if (index == 0 && isPropertyPut)
                {
                    stringBuilder.Insert(0, stringFromTypeDesc + " ");
                }
                else
                {
                    stringBuilder.Append(stringFromTypeDesc);
                    if (index < (int)funcdesc.cParams - 1)
                    {
                        stringBuilder.Append(", ");
                    }
                }
            }
            stringBuilder.Append(")");
            return(stringBuilder.ToString());
        }
Ejemplo n.º 2
0
        private static string GetStringFromTypeDesc(ITypeInfo typeinfo, System.Runtime.InteropServices.ComTypes.TYPEDESC typedesc)
        {
            if (typedesc.vt == (short)26)
            {
                System.Runtime.InteropServices.ComTypes.TYPEDESC structure = (System.Runtime.InteropServices.ComTypes.TYPEDESC)Marshal.PtrToStructure(typedesc.lpValue, typeof(System.Runtime.InteropServices.ComTypes.TYPEDESC));
                return(ComUtil.GetStringFromTypeDesc(typeinfo, structure));
            }
            if (typedesc.vt == (short)27)
            {
                System.Runtime.InteropServices.ComTypes.TYPEDESC structure = (System.Runtime.InteropServices.ComTypes.TYPEDESC)Marshal.PtrToStructure(typedesc.lpValue, typeof(System.Runtime.InteropServices.ComTypes.TYPEDESC));
                return("SAFEARRAY(" + ComUtil.GetStringFromTypeDesc(typeinfo, structure) + ")");
            }
            if (typedesc.vt == (short)29)
            {
                return(ComUtil.GetStringFromCustomType(typeinfo, typedesc.lpValue));
            }
            switch ((VarEnum)typedesc.vt)
            {
            case VarEnum.VT_EMPTY:
                return("");

            case VarEnum.VT_I2:
                return("short");

            case VarEnum.VT_I4:
            case VarEnum.VT_INT:
            case VarEnum.VT_HRESULT:
                return("int");

            case VarEnum.VT_R4:
                return("float");

            case VarEnum.VT_R8:
                return("double");

            case VarEnum.VT_CY:
                return("currency");

            case VarEnum.VT_DATE:
                return("Date");

            case VarEnum.VT_BSTR:
            case VarEnum.VT_LPSTR:
            case VarEnum.VT_LPWSTR:
                return("string");

            case VarEnum.VT_DISPATCH:
                return("IDispatch");

            case VarEnum.VT_BOOL:
                return("bool");

            case VarEnum.VT_VARIANT:
                return("Variant");

            case VarEnum.VT_UNKNOWN:
                return("IUnknown");

            case VarEnum.VT_DECIMAL:
                return("decimal");

            case VarEnum.VT_I1:
                return("char");

            case VarEnum.VT_UI1:
                return("byte");

            case VarEnum.VT_UI2:
                return("ushort");

            case VarEnum.VT_UI4:
            case VarEnum.VT_UINT:
                return("uint");

            case VarEnum.VT_I8:
                return("int64");

            case VarEnum.VT_UI8:
                return("uint64");

            case VarEnum.VT_VOID:
                return("void");

            case VarEnum.VT_CLSID:
                return("clsid");

            case VarEnum.VT_ARRAY:
                return("object[]");

            default:
                return("Unknown!");
            }
        }