public static string ConvertPInvokeType(ITypeSymbol returnType, PInvokeMode mode = PInvokeMode.None)
        {
            var dType = TypeProcessor.ConvertType(returnType);

            if (returnType.TypeKind == TypeKind.Delegate)
            {
                return GetDelegateRawType(dType);

//				var dlg =returnType.OriginalDefinition as IMethodSymbol;
//				if (dlg.Parameters.Length == 0)
////					return "() => " + TryConvertType (dlg.ReturnType);
////				else
////					return "(" + string.Join (", ", dlg.Parameters.ToList ().Select (o => TryConvertType (o.Type))) + ") => " + TryConvertType (dlg.ReturnType);
//
//			
//
//				return TypeProcessor.ConvertType (dlg.ReturnType) + " delegate" +
//						dlg.Parameters.ToList ().Select (o => ConvertPInvokeType (o.Type)) + ")";

//				return dType.RemoveFromStartOfString("Delegate!(").SubstringBeforeLast(')');
            }

            //TODO this should become a class with different options like CharSet etc ..
            switch (dType)
            {
                case "String":
                    return "char *"; //TODO: Should be dependent on the charset
                case "Array_T!(String)":
                    return "char**";
            }
            return dType;
        }
        public static string ConvertPInvokeType(ITypeSymbol returnType, PInvokeMode mode = PInvokeMode.None)
        {
            var dType = TypeProcessor.ConvertType(returnType);

            if (returnType.TypeKind == TypeKind.Delegate)
            {
                return(GetDelegateRawType(dType));

//				var dlg =returnType.OriginalDefinition as IMethodSymbol;
//				if (dlg.Parameters.Length == 0)
////					return "() => " + TryConvertType (dlg.ReturnType);
////				else
////					return "(" + string.Join (", ", dlg.Parameters.ToList ().Select (o => TryConvertType (o.Type))) + ") => " + TryConvertType (dlg.ReturnType);
//
//
//
//				return TypeProcessor.ConvertType (dlg.ReturnType) + " delegate" +
//						dlg.Parameters.ToList ().Select (o => ConvertPInvokeType (o.Type)) + ")";

//				return dType.RemoveFromStartOfString("Delegate!(").SubstringBeforeLast(')');
            }

            //TODO this should become a class with different options like CharSet etc ..
            switch (dType)
            {
            case "String":
                return("char *");

            case "Array_T!(String)":
                return("char**");
            }
            return(dType);
        }