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()); }
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!"); } }