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