private string FormatProcedure(NdrProcedureDefinition procedure)
        {
            string return_value;

            if (procedure.ReturnValue == null)
            {
                return_value = "void";
            }
            else if (procedure.ReturnValue.Type.Format == NdrFormatCharacter.FC_LONG)
            {
                return_value = "HRESULT";
            }
            else
            {
                return_value = procedure.ReturnValue.Type.FormatType(this);
            }

            string procedureParameters = string.Join(", ", procedure.Params.Select(
                                                         (p, i) => string.Format(
                                                             "{0} {1} {2}",
                                                             (this as INdrFormatterInternal).FormatComment("Stack Offset: {0}", p.Offset),
                                                             p.Format(this),
                                                             p.FormatName(i)
                                                             )
                                                         ));

            return(string.Format("virtual {0} __stdcall {1}({2});", return_value,
                                 procedure.Name, procedureParameters));
        }
 string INdrFormatter.FormatProcedure(NdrProcedureDefinition procedure)
 {
     return(procedure.FormatProcedure(this));
 }