• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            道。道。道

            安全特性不等于安全的特性

               :: 首頁 :: 聯系 :: 聚合  :: 管理

            常用鏈接

            搜索

            •  

            最新評論

                    在定義函數時,一直以來都是手工加入函數注釋,雖然每個函數的注釋內容并不是太多,但總是會有很多重復性的工作,哎。這兩天有點時間看看有什么方法了,昨天發現原來 Vistual Studio 2005里有個宏IDE工具可以實現我的目的(嘿嘿見笑,怎么早沒發現),研究一下了...,暈死是Basic語言,還好要實現我的功能不需要學習Basic太多的東西,簡單看一下基本的語法,開始動手試試吧。

            使用方法:
                    在VS2005IDE的宏資源管理器中新建一個宏項目,然后編輯,添加下面的Basic代碼保存,就可以使用了。

                    首先將文本光標移到 InitInstance 函數所在的行上,然后雙擊運行宏資源管理器中的MakeFunctionRemark,這時在代碼窗口中就可以自動創建該函數的基本注釋內容(函數名稱和參數等),效果下圖


            有個情況是我沒去解決的(解析麻煩點),返回值部分。哪位有興趣自己改吧。我只是在這里將不是返回值說明的(CALLBACK)手工刪除處理。還有就是函數的聲明只能在一行完成,該版本不支持分行聲明。





            '
            '
             Copyright(C) 2007,松鼠網絡工作室 保留所有權利。( All rights reserved. )
            '
             
            '
             文件名稱:DescriptionModule
            '
             摘    要:
            '
                   FileDescription     - 生成文件說明注釋
            '
                   FunctionRemark      - 生成函數說明注釋
            '
                   MakeFunctionRemark  - 根據函數聲明生成注釋
            '
             當前版本:1.0
            '
             作    者:松鼠
            '
             創建日期:2007年7月15日
            '

            Option Strict Off
            Option Explicit Off
            Imports System
            Imports EnvDTE
            Imports EnvDTE80
            Imports System.Diagnostics

            Public Module DescriptionModule
                
            ' --------------------------------------------------
                ' 生成文件說明注釋
                ' --------------------------------------------------
                Sub FileDescription()
                    
            Dim gAuthor As String = "松鼠"
                    
            Dim gCompany As String = "松鼠網絡工作室"

                    
            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(
            " * Copyright(C) " + Date.Today.Year.ToString() + "," + gCompany + " 保留所有權利。( All rights reserved. )" + vbCrLf)
                    outText.Insert(
            " * " + 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)
                    DTE.ActiveDocument.Selection.GotoLine(
            10)
                
            End Sub
                
            ' --------------------------------------------------
                ' 生成函數說明注釋
                ' --------------------------------------------------
                Sub FunctionRemark()
                    
            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)
                    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 StringAs 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(01<> ")" 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
                            idata.itemText 
            = strItem.Trim()
                            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 MakeFunctionRemark()
                    
            Dim preSpaceCount As Integer = 0   ' 注釋前面的空格數, 縮進(單位:字符)
                    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 
            + "// 函數名稱:" + vbCrLf)
                                outText.Insert(strSpace 
            + "//     " + idata.itemText + vbCrLf)
                            
            Case 2
                                
            If pcount = 0 Then
                                    outText.Insert(strSpace 
            + "// 參數:" + vbCrLf)
                                
            End If
                                pcount 
            = pcount + 1
                                outText.Insert(strSpace 
            + "//    - " + 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 
            + "// 說明:" + vbCrLf)
                    outText.Insert(strSpace 
            + "//     " + vbCrLf)
                    outText.Insert(strSpace 
            + "//-----------------------------------------------------------" + vbCrLf)
                    lItemList.Clear()   
            '清楚所有元素
                End Sub
            End Module


            另外兩個函數使用方法同上
            FileDescription     - 生成文件說明注釋


            FunctionRemark      - 生成函數說明注釋(空注釋)


            如果要修改注釋前面縮進空格,可以修改Basic代碼中的 preSpaceCount  變量值。

            在VS2005(VC++)下測試通過, 沒用過其他版本的開發工具(未驗證),初次寫Basic代碼,有不對的地方還請見諒!
            看了MSDN中對宏的介紹,功能確實很爽,有時間再研究研究了。。。。


            posted on 2007-07-15 22:47 獨孤九劍 閱讀(4336) 評論(0)  編輯 收藏 引用 所屬分類: Visual C++ 8.0
            国产精品99久久久精品无码| 青青国产成人久久91网| 伊人久久大香线蕉av不卡| 国内精品久久久久影院一蜜桃| 久久青青草原综合伊人| 热综合一本伊人久久精品| 狠狠色综合网站久久久久久久高清| 国产成人综合久久综合| 深夜久久AAAAA级毛片免费看| 久久精品国产亚洲77777| 午夜精品久久久久久| 久久精品国产亚洲网站| 亚洲va久久久噜噜噜久久狠狠| 国产精品免费看久久久香蕉 | 99国产精品久久| 亚洲欧美成人久久综合中文网 | 国产精品免费久久久久久久久| 亚洲国产精品无码久久久蜜芽 | 久久人人爽人人人人爽AV| 99国内精品久久久久久久| 久久久久人妻精品一区二区三区| 久久这里有精品| 国产精品免费久久| 久久99国产一区二区三区| 久久九九全国免费| 久久91精品国产91久久户| 国产∨亚洲V天堂无码久久久| 亚洲va国产va天堂va久久| 久久久久久久精品成人热色戒| 色婷婷综合久久久久中文字幕| 合区精品久久久中文字幕一区| 久久久久亚洲av成人无码电影 | 国产亚洲色婷婷久久99精品91| 免费观看成人久久网免费观看| 亚洲综合伊人久久综合| 亚洲欧美日韩中文久久| 中文字幕无码av激情不卡久久| 性做久久久久久久久浪潮| 伊人久久大香线蕉AV色婷婷色| 精品乱码久久久久久久| 青青热久久综合网伊人|