用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中,呵呵,所以我带了源码工程;可以下载编译试试看。
也许你用的着。
下载点这里
这个是图例
软件的原型是参照 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中,呵呵,所以我带了源码工程;可以下载编译试试看。
也许你用的着。
下载点这里
这个是图例
相关文章推荐
- 一个类似FlashGet的c#开源下载工具
- MSBuild Engine分析C#/VB.Net工程文件
- 自己动手编写CSDN博客备份工具-blogspider之源码分析(2)
- 一个实用的工具类:How To: Generate a Random Password (C#/VB.NET)
- Nginx源码分析 - 实战篇 - 编写一个挂载到阶段处理的模块
- 【C#小工具】百度网盘不限速下载工具。源码下载
- Nginx源码分析与实践---(一)编写一个简单的Http模块
- 自己写的一个代码自动生成工具_java版_源码下载
- asp.net,java,jsp,安卓Android,苹果ios,php,vb.net,c#免费毕业课程设计源码共享网盘下载
- 转载一个很经典的--C# Socket TCP和UDP报文及端口测试工具的开发(提供源码)
- 自己动手编写CSDN博客备份工具-blogspider之源码分析(1)
- C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)
- C#编写数据分析软件(附源码)
- Nginx源码分析 - 实战篇 - 编写一个自定义的模块
- [转]提供一个C#编写的基类源码(用于操作WINDOWNS系统的服务)
- DotNet4应用程序打包工具->升级版【三】宿主程序分析+全部源码下载
- asp.net,java,jsp,安卓Android,苹果ios,php,vb.net,c#免费毕业课程设计源码共享网盘下载
- C# 关闭/打开显示器工具+源码(一个API的简单操作)
- 用c#编写一个高级文件加密工具
- 自己动手编写CSDN博客备份工具-blogspider之源码分析(2)