,一、先测试如果不能运行宏,则要先在工具里设置容许,如果还不行就安sp1补丁
二、具体地址:
http://www.cppblog.com/eday/archive/2007/07/15/28079.html
三、可以对其进行小量的修改用于自己的vc编程,虽然用vs小助手,但写函数的时候它肯定不会自动读出参数列表的,自己写多麻烦。
//下面这个是在这位达人上修改的版本,适合自己的使用,主要还是那个函数的参数,不想让它有一个类型。
' ' Copyright(C) 2007,松鼠网络工作室 保留所有权利。( All rights reserved. ) ‘ 在作者上的小小修改 ,http://www.cppblog.com/eday/archive/2007/07/15/28079.html Option Strict Off Option Explicit Off Imports System Imports EnvDTE Imports EnvDTE80 Imports System.Diagnostics Public Module JU ' -------------------------------------------------- ' 生成文件说明注释 ' -------------------------------------------------- Sub 文件头() Dim gAuthor As String = "JU" Dim gCompany As String = "JU" Dim outTextDoc As TextDocument Dim outText As EditPoint DTE.ActiveDocument.Selection.GotoLine(1) outTextDoc = DTE.ActiveDocument.Object("TextDocument") outText = outTextDoc.StartPoint.CreateEditPoint() outText.Insert("/*" + vbCrLf) outText.Insert("-----------------------------------------------------------------------------" + vbCrLf) outText.Insert(" * Copyright(C) " + Date.Today.Year.ToString() + "," + gCompany + " 保留所有权利。( All rights reserved. )" + vbCrLf) outText.Insert(" * 文件名称:" + DTE.ActiveDocument.Name + vbCrLf) outText.Insert(" * 摘 要:" + vbCrLf) outText.Insert(" * 当前版本:1.0" + vbCrLf) outText.Insert(" * 作 者:" + gAuthor + vbCrLf) outText.Insert(" * 创建日期:" + Date.Today.ToLongDateString() + vbCrLf) outText.Insert(" * 修改历史:" + vbCrLf) outText.Insert("-----------------------------------------------------------------------------" + vbCrLf) outText.Insert(" */" + vbCrLf) DTE.ActiveDocument.Selection.GotoLine(10) End Sub ' -------------------------------------------------- ' 生成函数说明注释 ' -------------------------------------------------- Sub 空函数说明() Dim preSpaceCount As Integer = 0 ' 注释前面的空格数, 缩进(单位:字符) Dim outTextDoc As TextDocument Dim outText As EditPoint Dim iCurrentLineNumber As Integer iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine '.ToString() outTextDoc = DTE.ActiveDocument.Object("TextDocument") outText = outTextDoc.StartPoint.CreateEditPoint() ' 移动文本输入点到指定行上 outText.MoveToLineAndOffset(iCurrentLineNumber, 1) Dim strSpace As String = "" Dim iSpaceIndex As Integer For iSpaceIndex = 1 To preSpaceCount strSpace = strSpace + " " Next outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf) outText.Insert(strSpace + "// 函数名称:" + vbCrLf) outText.Insert(strSpace + "// 参 数:" + vbCrLf) outText.Insert(strSpace + "// 返 回:" + vbCrLf) outText.Insert(strSpace + "// 说 明:" + vbCrLf) outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf) End Sub ' -------------------------------------------------- ' ' 函数注释解析部分 ' ' -------------------------------------------------- Public Structure ITEMDATA Public itemType As Integer Public itemText As String End Structure Public lItemList As New System.Collections.Generic.List(Of ITEMDATA)(4) Private Function ParseFunctionDescription(ByVal funText As String) As Boolean Dim strItem As String Dim idata As ITEMDATA Dim strSplit As String() = funText.Split("(") If strSplit.Length = 1 Then Return False End If '解析函数名称部分 If strSplit.Length > 2 Then strItem = strSplit(strSplit.Length - 2).Trim() Else strItem = strSplit(0).Trim() End If Dim strHeadSplit As String() = strItem.Split(" ") strItem = strHeadSplit(strHeadSplit.Length - 1).Trim() idata.itemType = 1 idata.itemText = strItem.Trim() lItemList.Add(idata) '解析参数部分 strItem = strSplit(strSplit.Length - 1).Trim() If strItem.Substring(0, 1) <> ")" Then Dim iend As Integer = strItem.IndexOf(")", 0) Dim strParams As String = strItem.Substring(0, iend).Trim() Dim strParamSplit As String() = strParams.Split(",") For Each strItem In strParamSplit idata.itemType = 2 '以空格分隔的第二个 Dim strParamTwo As String = strItem.Trim() Dim strParamName As String() = strParamTwo.Split(" ") Dim strParam As String For Each strParam In strParamName '只有第二个才是,如果是=号说明是默认的参数 If strParam.Trim() = "=" Then Exit For End If idata.itemText = strParam.Trim() Next strParam lItemList.Add(idata) Next strItem Else idata.itemType = 2 idata.itemText = "无参数" lItemList.Add(idata) End If '解析返回值类型 Dim iIndex As Integer For iIndex = 0 To strHeadSplit.Length - 2 idata.itemType = 3 idata.itemText = strHeadSplit(iIndex).Trim() lItemList.Add(idata) Next iIndex Return True End Function ' -------------------------------------------------- ' ' 根据函数声明生成注释 ' ' -------------------------------------------------- Sub 函数说明() Dim preSpaceCount As Integer = 4 ' 注释前面的空格数, 缩进(单位:字符) Dim outTextDoc As TextDocument Dim outText As EditPoint Dim iCurrentLineNumber As Integer Dim iLineLength As Integer Dim strFunText As String Dim iItemIndex As Integer Dim idata As ITEMDATA lItemList.Clear() iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine.ToString() outTextDoc = DTE.ActiveDocument.Object("TextDocument") outText = outTextDoc.StartPoint.CreateEditPoint() ' 移动文本输入点到指定行上 outText.MoveToLineAndOffset(iCurrentLineNumber, 1) iLineLength = outText.LineLength strFunText = outText.GetText(iLineLength) iLineLength = strFunText.Trim().Length '但前行没有内容直接返回 If iLineLength = 0 Then Return End If ' 解析函数名称 Dim bResult As Boolean = ParseFunctionDescription(strFunText.Trim()) If bResult = False Then lItemList.Clear() Return End If Dim pcount As Integer = 0 Dim rcount As Integer = 0 Dim strSpace As String = "" Dim iSpaceIndex As Integer For iSpaceIndex = 1 To preSpaceCount strSpace = strSpace + " " Next outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf) For iItemIndex = 0 To lItemList.Count - 1 idata = lItemList.Item(iItemIndex) Select Case idata.itemType Case 1 outText.Insert(strSpace + "// @name " + idata.itemText + "()" + vbCrLf) outText.Insert(strSpace + "// @description " + vbCrLf) Case 2 If pcount = 0 Then 'outText.Insert(strSpace + "// @param " + vbCrLf) End If pcount = pcount + 1 outText.Insert(strSpace + "// @param [in] " + idata.itemText + vbCrLf) ' Case 3 'If rcount = 0 Then 'outText.Insert(strSpace + "// @返 回:" + vbCrLf) 'End If 'rcount = rcount + 1 'outText.Insert(strSpace + idata.itemText + vbCrLf) Case 4 Case 5 End Select Next outText.Insert(strSpace + "// @return " + vbCrLf) outText.Insert(strSpace + "// @note " + vbCrLf) 'outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf) lItemList.Clear() '清除所有 End Sub Sub 简单说明() iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine.ToString() outTextDoc = DTE.ActiveDocument.Object("TextDocument") outText = outTextDoc.StartPoint.CreateEditPoint() ' 移动文本输入点到指定行上 outText.MoveToLineAndOffset(iCurrentLineNumber, 1) outText.Insert("/**" + vbCrLf) outText.Insert("*/" + vbCrLf) End Sub ' End Module |