• <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
            狠狠色狠狠色综合久久| 久久久久亚洲精品无码蜜桃 | 综合久久给合久久狠狠狠97色 | 狠狠干狠狠久久| 国产激情久久久久影院| 日韩亚洲国产综合久久久| 精品久久无码中文字幕| 久久精品一区二区三区AV| 精品久久久久久国产潘金莲| 久久久久国产一区二区三区| avtt天堂网久久精品| 99久久做夜夜爱天天做精品| 97久久久精品综合88久久| 国产精品中文久久久久久久| 欧美777精品久久久久网| 亚洲AV无码久久| 波多野结衣久久| 亚洲v国产v天堂a无码久久| 国产午夜久久影院| 久久夜色精品国产网站| 精品国产乱码久久久久软件| 精品人妻伦一二三区久久| 99久久精品国产高清一区二区 | 久久精品国产亚洲AV无码偷窥| 欧美日韩成人精品久久久免费看 | 久久毛片一区二区| 久久青青国产| 久久综合九色欧美综合狠狠| 国产精品99久久精品爆乳| 久久精品免费观看| 精品蜜臀久久久久99网站| 国产精品9999久久久久| 99久久99久久精品免费看蜜桃| 亚洲精品国产美女久久久| 日韩久久久久久中文人妻 | 777久久精品一区二区三区无码| 久久精品国产亚洲av高清漫画| 色妞色综合久久夜夜| 精品久久久久久国产潘金莲| 国产精品久久久久久久久鸭| 久久福利青草精品资源站免费|