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

简介:

    最近加入一个公司,试用期间要我学习他们的旧系统,旧系统的代码是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)
{
if (fileName != "")
{
try
{
System.IO.StreamReader sr = new System.IO.StreamReader(fileName,System.Text.Encoding.Default);
return sr.ReadToEnd();
}

catch
{
return null;
}

}

else
{
return null;
}

}


分析窗体组件

private void button1_Click( object sender, System.EventArgs e)
{
callMain(listView1,textBox1.Lines);
}


private void Form1_Resize( object sender, System.EventArgs e)
{
try
{
listView1.Height= textBox1.Top - listView1.Top;
}

catch
{
}

}


/********************************
* 通用函数,返回按分隔符、位的单词
******************************
*/

private string CharIndex( string sSrc, string SplitChar, int CharIndex)
{
string[] tmpArray = sSrc.Split(SplitChar.ToCharArray());
return tmpArray[CharIndex];
}

/********************************
* 通用保存ListView到文件得过程
******************************
*/

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

if(mSaveLvToFile.GetContextMenu().SourceControl is ListView)
{

saveFileDlg.ShowDialog(this);
if(saveFileDlg.FileName!="")
{
string sTextFile = "";
ListView lv=(ListView)mSaveLvToFile.GetContextMenu().SourceControl;
for(int i=0;i<lv.Items.Count;i++)
{
string sLine = "";
for(int j=0;j<lv.Items[i].SubItems.Count;j++)
{
if(j!=(lv.Items[i].SubItems.Count-1))
{
sLine += lv.Items[i].SubItems[j].Text + ",";
}

else
{
sLine += lv.Items[i].SubItems[j].Text + "\r\n";
}


}


if(sTextFile.IndexOf(sLine)==-1)
{
sTextFile += sLine;
}

}

try
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(saveFileDlg.FileName,false,System.Text.Encoding.Default);
sw.Write(sTextFile);
sw.Close();
MessageBox.Show("保存文件完成!");
}

catch
{
MessageBox.Show("保存文件错误!");
}

}

}

}


private void btnParseVar_Click( object sender, System.EventArgs e)
{
callMain2(
listViewConst,
listViewType,
listViewAPI,
listViewPubvar,
listViewPrivar,
textBox2.Lines
);
}


分析变量,声明等类型

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

}

/**************************************
* 主循环处理内容3
************************************
*/

private void callMain2(
System.Windows.Forms.ListView lv1,
string[] listFiles)
{
lv1.Items.Clear();
lv1.Items.Add("事件过程");
for (int i=0;i<listFiles.Length;i++)
{
parseProc(lv1,listFiles[i],loadForm(listFiles[i]));
}

MessageBox.Show("分析完毕!");
}

/******************************************
* 处理变量结果并增加结果到listview
****************************************
*/

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()==""){continue;}
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中,呵呵,所以我带了源码工程;可以下载编译试试看。
也许你用的着。

下载点这里

这个是图例




本文转自suifei博客园博客,原文链接:http://www.cnblogs.com/Chinasf/archive/2005/04/18/139653.html,如需转载请自行联系原作者
相关文章
|
6月前
|
自然语言处理 C# Windows
C#开源免费的Windows右键菜单管理工具
C#开源免费的Windows右键菜单管理工具
|
2月前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
3月前
|
数据采集 XML JavaScript
C# 中 ScrapySharp 的多线程下载策略
C# 中 ScrapySharp 的多线程下载策略
|
1月前
|
监控 前端开发 安全
C#一分钟浅谈:文件上传与下载功能实现
【10月更文挑战第2天】在Web应用开发中,文件的上传与下载是常见需求。本文从基础入手,详细讲解如何在C#环境下实现文件上传与下载。首先介绍前端表单设计及后端接收保存方法,使用`&lt;input type=&quot;file&quot;&gt;`与`IFormFile`接口;接着探讨错误处理与优化策略,如安全性验证和路径管理;最后讲解文件下载的基本步骤,包括确定文件位置、设置响应头及发送文件流。此外,还提供了进阶技巧,如并发处理、大文件分块上传及进度监控,帮助开发者构建更健壮的应用系统。
79 15
|
6月前
|
IDE C# 开发工具
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
188 6
|
1月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
47 0
|
1月前
|
SQL JSON BI
最好的 C# .NET 报告工具
最好的 C# .NET 报告工具
35 0
|
5月前
|
算法 C#
C#开源实用的工具类库,集成超过1000多种扩展方法
C#开源实用的工具类库,集成超过1000多种扩展方法
|
6月前
|
数据采集 API C#
网页解析高手:C#和HtmlAgilityPack教你下载视频
使用C#和HtmlAgilityPack解析小红书网页,下载其视频内容。文章涵盖了解析网页、获取视频链接、C#实现、HtmlAgilityPack简化解析、代理IP确保下载稳定及多线程提高下载效率。提供的代码示例展示了如何设置代理和多线程下载视频。实验结果显示,该方法能有效、高效地下载小红书视频。
121 5
网页解析高手:C#和HtmlAgilityPack教你下载视频