• <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 獨孤九劍 閱讀(4327) 評論(0)  編輯 收藏 引用 所屬分類: Visual C++ 8.0
            久久精品视频网| 久久久久国产精品熟女影院| 久久久精品2019免费观看| 久久天天躁狠狠躁夜夜96流白浆| 99久久国产综合精品女同图片| 漂亮人妻被黑人久久精品| 国产精品美女久久久m| 日本三级久久网| 久久久久一本毛久久久| 波多野结衣AV无码久久一区| 久久精品九九亚洲精品| 国产精品无码久久久久| 久久婷婷色综合一区二区| 国产精品久久久久久久久免费| 国产精品一区二区久久精品无码| 无码任你躁久久久久久老妇| 无码人妻精品一区二区三区久久| 久久国产亚洲精品麻豆| 精品国产乱码久久久久软件| 99久久人妻无码精品系列| 久久影院久久香蕉国产线看观看| 久久综合给合久久国产免费| 亚洲国产成人久久综合碰| 久久国产精品久久久| 色偷偷偷久久伊人大杳蕉| 中文字幕精品无码久久久久久3D日动漫| 亚洲va国产va天堂va久久| 久久综合久久伊人| 国产精品永久久久久久久久久| 日本强好片久久久久久AAA| 亚洲AV伊人久久青青草原| 99久久精品影院老鸭窝| 一本久道久久综合狠狠爱| 中文成人无码精品久久久不卡| 精品99久久aaa一级毛片| 91精品国产高清久久久久久91 | 无码人妻少妇久久中文字幕蜜桃| 女人高潮久久久叫人喷水| 久久香蕉国产线看观看猫咪?v| 国产精品美女久久久久AV福利| 天天久久狠狠色综合|