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); }