`
yiyeqinghuasoon
  • 浏览: 680711 次
文章分类
社区版块
存档分类
最新评论

使用VC内嵌Python实现的一个代码检测工具

 
阅读更多

最近组内准备整顿代码,领导让我写个简单的python脚本分析代码中注释的行数和无效注释。因为这个需求不是很急,所以我想把简单的事情做复杂点。于是就写了一个用VC内嵌Python,并通过模拟按键和发消息去控制其他软件的工具。

作为一个程序员,总是希望自己写的东西别人能用上且喜欢去用。因为python更新很快,往往两个版本中存在一些语法或者实现的改动。其实最讨厌的就是语法变动了,像2.X的print到3.X时就是print()了。我本意是希望做个大家都能用上的,于是我决定用VC内嵌一个python引擎去完成相关工作。

首先说一下环境准备,这个网上一大堆,主要是下载并配置好pythonXX_d.lib、pythonXX.lib、python.dll等几个文件。然后一切就可以开始了。

python分析的过程也很简单,AnalyzeFloder.py是对一个文件夹进行遍历,并做相关统计;AnalyzeFileComment.py是分析每个文件并且帅选出注释;CommentUseOrNo.py是分析每个注释,看看是否是无用注释;AnalyzeReport.py做相关统计和序列化、反序列化工作。AFCUI.py 是对上述功能的封装。这里说一下对无用注释的定义,我们定义如果注释内容为符合VC编码风格的代码即认为是无效代码。在现实开发中,特别是人员流动性特别大的公司,新人做需求时往往不敢去碰那些没有任何注释的代码,于是他们就直接把这些似乎不用了的代码注释掉。这样长久下来,“无用注释”的量就会很大了。

以上是我定义的无效代码的正则表达式,因为正则也是拿来用用,没有好好研究过,所以写的不好,凑合着用了,从目前的效果看,还是可以的。

其次,对于分析出来的数据,我将其序列化到一个文件中,这样以后要是加载之前分析过的工程,就可以直接反序列化那个文件就行了,不用重复分析。

再次,说下python和VC的通信。python可以直接和VC通信,但是我返回的数据是一个复杂的结构,我一直也没想到一个简便的办法去解决,于是,我就自定义一种格式,让python在处理完数据后,将数据保存为我定义的格式,然后把文件名返回给VC,VC去读并分析这个文件,从而得到数据。

对应的VC解析代码我放在CAnalyzeVcData中,代码就不贴的(没严格省代码)。

python的大致流程就是如此,VC要是想执行Python的脚本,就如下了

如果对于分析出的数据,为了方便用户查看,我得打开源代码并定位到那个位置。我想过很多方法,想过自己做RichEdit,但是我对界面实在不感冒,于是懒的情绪就上来了。但是我对“玩”还是很有感觉的,我决定盗用微软的Notepad.exe,还修改了Notepad.exe的资源,成为我定制版的东东。然后通过模拟按键和发消息等方法去让它去打开源代码并定位位置。


但是使用中,我发现有点不爽。因为我发现,notepad.exe不可以显示行。UE呢还要注册,于是选用Notepadplusplus了。Notepadplusplus还支持多标签页,让我感觉很兴奋,超出我的预期。

贴一段控制notepadplusplus的代码。

于是大功告成了。

目前还有很多没有完善的地方,比如字符串的转码(程序放在中文目录下有转码问题,出在python回传结果的时候)和规则(规则不全面)。还有很多可以“玩”的功能,比如对单个文件的重新分析。目前我思路都想好了,也预留了接口。我想通过FindFirstChangeNotification监控指定目录文件,如果有改动,就调用AFCUI.py中

(需要封装)。然后VC得到当个文件的可以解析的数据,并更新内存和界面。因为之前玩过FindFirstChangeNotification(我毕设就是玩它的),所以我就没多大兴趣去做这个功能了。

还有这次MFC代码,我尝试了下界面和逻辑分离的原则,很好玩,代码也清晰很多,所有的逻辑都在CManageTask类中。

代码链接:AnalyzeCode


分享到:
评论

相关推荐

    VCForPython27.msi.zip

    总结来说,VCForPython27.msi.zip是一个解决Python 2.7在安装C扩展库时可能出现问题的必备工具。如果在安装Python 2.7的某些库时遇到“Failed building wheel for…”的错误,用户需要先安装这个压缩包中的VCFor...

    VCForPython27.msi

    1. **Microsoft Visual C++ Compiler for Python 2.7**:这是微软专门为Python 2.7开发的一个编译器,因为Python 2.7本身不包含C++编译器,而许多Python库在安装时需要编译源代码,这就需要一个合适的C++编译环境。...

    VCForPython27.zip

    标题 "VCForPython27.zip" 提示我们这是一个与Python编程相关的压缩文件,特别是与Visual C++(VC)编译器的某个版本有关,因为"VCForPython27"暗示了它是为Python 2.7版本提供的。在Python的世界里,尤其是当涉及到...

    VCForPython27和windows 系统下python 2.7 的mysql驱动

    2. **pymysql**: 这是一个纯Python实现的MySQL驱动,无需C编译器即可安装,对于那些无法或者不想安装`VCForPython27`的用户来说,是一个很好的选择。pymysql提供了与MySQLdb类似的API,兼容性良好,且在Python 3.x中...

    VC调用Python函数,源代码

    本篇将详细讲解如何在VC++项目中实现对Python函数的调用,以及提供一个名为"pytest"的示例。 首先,调用Python函数在VC++中需要借助Python的API接口,这通常通过Python的动态链接库(.dll文件)来完成。确保你的...

    [Python] VCForPython27

    错误的可执行文件,比如在使用pip install wordcloud安装词云过程中,可能会遇到该错误,其原因是在安装VS过程中缺少这个VCForPython27的工具,而且微软一直访问失败,免费资源希望对您有所帮助~同时做个在线笔记。...

    VCForPython27

    1、先安装VCForPython27,因为docx需要Microsoft Visual C++ 9.0依赖 2、如果pip版本过低,先在线升级成最新版本(Version 10.0.1),命令如下: 3、安装lxml-4.2.1-cp27-cp27m-win32.whl,命令如下: pip install...

    VC项目调用Python文件脚本

    在压缩包中的`InvokePython`文件很可能是一个示例或工具,用于演示如何在VC项目中调用Python脚本。可能包含的代码片段可能有初始化Python解释器、加载和执行Python脚本、传递参数、接收返回值等步骤。 总结来说,VC...

    用vc实现串口通信的完整代码.rar

    用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的...

    windows下编译工具Microsoft Visual C++ Compiler for Python VCForPython

    不过,对于许多Windows上的Python开发者而言,VCForPython提供了一个便捷且高效的方法来处理编译问题,从而可以更加专注于Python开发本身。 此外,使用VCForPython时,还应注意选择适合自己Python版本的编译器。...

    vc调用python函数的例子

    假设你有一个Python脚本`my_script.py`,其中定义了一个名为`add_numbers`的函数: ```python def add_numbers(a, b): return a + b ``` 在VC++代码中,你可以使用`PyRun_SimpleString`或`PyRun_SimpleFile`来...

    VCForPython27.rar

    VCForPython27.msi安装包包含了Microsoft Visual C++ 2008 SP1 Redistributable Package,这是一个运行时库,用于执行使用Visual C++ 2008编译器开发的应用程序。这个库包含了运行Python二进制文件(如.dll或.exe)...

    vcforpython272

    python27 安装ipython5.3 时编译工具

    vcForPython27解决安装pycrypto报错vcvarsall.bat找不到问题

    在Python开发过程中,有时我们需要使用特定的库来扩展其功能,比如`pycrypto`,它是一个用于加密和解密操作的流行库。然而,在安装`pycrypto`时,可能会遇到一些依赖问题,尤其是在Windows系统上。标题和描述中提到...

    VCForPython+MySQL-python-1.2.3

    Visual C++ for Python,通常称为VCForPython,是Microsoft为Python 2.x版本提供的一个工具,它允许开发者构建和运行使用C或C++编写的Python扩展模块。 在文件列表中,我们有两个文件: 1. `MySQL-python-1.2.3.win...

Global site tag (gtag.js) - Google Analytics