您的位置:首页 > 编程语言 > VB

用c#编写一个vb 工程源码分析工具(带源码工程下载)

2005-04-18 13:35 881 查看
    最近加入一个公司,试用期间要我学习他们的旧系统,旧系统的代码是Visual Basic 6.0编写的,源码大概有10多万行,要一下子看完可不容易,并且还得出一个源码分析的文档。而最近的项目是新版本的开发,采用.Net的Visual C#开发,所以我边学c#边看代码;一是为了解决文档编写的问题,二是为了学习c#,就编写了一套专门分析vb Project的工具,其原理就是根据vb的工程文件解析所有的“变量、常量、API、过程、函数、事件”还有它们的类型“私有、全局”;由于时间关系,准备实现的“事件调用”分析并没有完成,但最后我的文档还是出来了。其中就有它的功劳。

    软件的原型是参照 Aivosto 公司的"Aivosto Project Analyzer"制作的,它的功能很强大,只是它需要¥¥才能使用全部功能,否则只能导出txt文件,谁能有破解发我一份吧 :)

代码其实并不复杂,因为vb的语法很简单,都是行模式,虽然支持 & _ 连接符号,但是处理起来只需要替换掉即可。

    以下是核心的算法(也算不上什么算法,只是我的分析模式)

dd

    private string loadForm(string fileName)

    

    private void button1_Click(object sender, System.EventArgs e)

    private void Form1_Resize(object sender, System.EventArgs e)

    private string CharIndex(string sSrc,string SplitChar,int CharIndex)

    private void mSaveLvToFile_Click(object sender, System.EventArgs e)

    private void btnParseVar_Click(object sender, System.EventArgs e)

    private void btnParseProc_Click(object sender, System.EventArgs e)

    private void callMain2(

      System.Windows.Forms.ListView lv1,

      string[] listFiles)

    private void parseProc(

      System.Windows.Forms.ListView lv1,

      string fileName,string s)

          //1.寻找API声明

      //2.寻找过程、函数、事件

      if(s==null)return;

      s = replace2bank(s);

      string[] strLines = s.Split (Environment.NewLine.ToCharArray());  //获取分隔符号

      string[] strConstList = parseVarConst(strLines);

      //lv.Items.Add("API声明");

      if(strConstList!=null)

              for(int i=0;i<strConstList.Length;i++)

                  if(strConstList[i].Trim()=="")          string[] smaillList = strConstList[i].Split("\r".ToCharArray());

          ListViewItem lvi = new ListViewItem(smaillList,-1);

          if(fileName.LastIndexOf("\\")!=-1)

            lvi.SubItems.Add(fileName.Substring(fileName.LastIndexOf("\\")+1));

          else lvi.SubItems.Add(fileName);

          lv1.Items.Add(lvi);

        }

      }

    }

    也许你看到这大段的代码,感觉乱七八糟的,那确实;我只是为了满足自己的需要,并且没有封装整理,全在一个Form.cs中,呵呵,所以我带了源码工程;可以下载编译试试看。

也许你用的着。



下载点这里



这个是图例

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: