private INdrFormatter GetNdrFormatter(bool useDemangler) { DefaultNdrFormatterFlags flags = cbProxyRenderStyle.SelectedIndex % 2 == 0 ? DefaultNdrFormatterFlags.None : DefaultNdrFormatterFlags.RemoveComments; Func <string, string> demangler = useDemangler ? COMUtilities.DemangleWinRTName : (Func <string, string>)null; bool useNtApiFormatter = this.cbProxyRenderStyle.SelectedIndex < 2; return(useNtApiFormatter ? DefaultNdrFormatter.Create(m_iids_to_names, demangler, flags) : // cpp style requested CppNdrFormatter.Create(m_iids_to_names, demangler, flags) ); }
/// <summary> /// Format the RPC server as text. /// </summary> /// <param name="remove_comments">True to remove comments from the output.</param> /// <param name="cpp_format">Formating using C++ pseduo syntax.</param> /// <returns>The formatted RPC server.</returns> public string FormatAsText(bool remove_comments, bool cpp_format) { DefaultNdrFormatterFlags flags = remove_comments ? DefaultNdrFormatterFlags.RemoveComments : DefaultNdrFormatterFlags.None; INdrFormatter formatter = cpp_format ? CppNdrFormatter.Create(flags) : DefaultNdrFormatter.Create(flags); StringBuilder builder = new StringBuilder(); if (!remove_comments) { builder.AppendLine($"// DllOffset: 0x{Offset:X}"); builder.AppendLine($"// DllPath {FilePath}"); if (!string.IsNullOrWhiteSpace(ServiceName)) { builder.AppendLine($"// ServiceName: {ServiceName}"); builder.AppendLine($"// ServiceDisplayName: {ServiceDisplayName}"); } if (EndpointCount > 0) { builder.AppendLine($"// Endpoints: {EndpointCount}"); foreach (var ep in Endpoints) { builder.AppendLine($"// {ep.BindingString}"); } } } if (ComplexTypes.Any()) { if (!remove_comments) { builder.AppendLine("// Complex Types: "); } foreach (var type in ComplexTypes) { builder.AppendLine(formatter.FormatComplexType(type)); } } builder.AppendLine().AppendLine(formatter.FormatRpcServerInterface(Server)); return(builder.ToString()); }
internal NdrFormatter(IDictionary <Guid, string> iids_to_names, Func <string, string> demangle_com_name, DefaultNdrFormatterFlags flags) { _iids_to_name = iids_to_names; _demangle_com_name = demangle_com_name ?? (s => s); _flags = flags; }
/// <summary> /// Create the default formatter. /// </summary> /// <param name="flags">Formatter flags.</param> /// <returns>The CPP formatter.</returns> public static INdrFormatter Create(DefaultNdrFormatterFlags flags) { return(Create(new Dictionary <Guid, string>(), flags)); }
/// <summary> /// Create the CPP formatter. /// </summary> /// <param name="iids_to_names">Specify a dictionary of IIDs to names.</param> /// <param name="flags">Formatter flags.</param> /// <returns>The CPP formatter.</returns> public static INdrFormatter Create(IDictionary <Guid, string> iids_to_names, DefaultNdrFormatterFlags flags) { return(Create(iids_to_names, null, flags)); }
/// <summary> /// Create the CPP formatter. /// </summary> /// <param name="iids_to_names">Specify a dictionary of IIDs to names.</param> /// <param name="demangle_com_name">Function to demangle COM interface names during formatting.</param> /// <param name="flags">Formatter flags.</param> /// <returns>The CPP formatter.</returns> public static INdrFormatter Create(IDictionary <Guid, string> iids_to_names, Func <string, string> demangle_com_name, DefaultNdrFormatterFlags flags) { return(new CppNdrFormatterInternal(iids_to_names, demangle_com_name, flags)); }
internal CppNdrFormatterInternal(IDictionary <Guid, string> iids_to_names, Func <string, string> demangle_com_name, DefaultNdrFormatterFlags flags) : base(iids_to_names, demangle_com_name, flags) { }