• <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 獨孤九劍 閱讀(4321) 評論(0)  編輯 收藏 引用 所屬分類: Visual C++ 8.0
            国产福利电影一区二区三区久久久久成人精品综合 | 久久免费美女视频| 国产精品久久影院| 91超碰碰碰碰久久久久久综合 | 一本久道久久综合狠狠爱| 国产精品美女久久福利网站| 欧美日韩成人精品久久久免费看| 久久精品视屏| 国产69精品久久久久观看软件| 久久这里的只有是精品23| 国产69精品久久久久久人妻精品| 久久久久无码精品国产不卡| 久久精品国产久精国产思思| 久久久久国产日韩精品网站| 久久精品国产AV一区二区三区| 久久综合久久综合九色| 欧美精品一区二区久久| 99久久久国产精品免费无卡顿| 日韩va亚洲va欧美va久久| 久久婷婷国产综合精品| 成人亚洲欧美久久久久 | 久久亚洲精品无码观看不卡| 天天躁日日躁狠狠久久| 欧美性大战久久久久久| 国内精品久久久久久久久电影网| 无码AV中文字幕久久专区| 欧美粉嫩小泬久久久久久久| 久久国产精品久久国产精品| 天天爽天天狠久久久综合麻豆| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 色欲综合久久躁天天躁蜜桃| 久久久久久国产精品美女| 久久婷婷五月综合色高清| 亚洲精品无码久久久久久| 狠狠色丁香婷婷久久综合五月| 精品伊人久久久| 狠狠色综合网站久久久久久久| 久久99久久无码毛片一区二区 | 国产一级持黄大片99久久| 婷婷五月深深久久精品| 久久天天躁狠狠躁夜夜躁2O2O|