VS2022配置工程的编译路径(输出目录和中间目录)

VS2022配置工程的编译路径(输出目录和中间目录)

TIPS:以下使用visual C++中Windows桌面向导生成的解决方案为例。且演示的visual studio的版本为2022,即visual studio 2022。

 注意:不勾选放在同一目录下

 

 

一、说明默认的工程配置编译路径

我们在解决方案内新建两个项目

 其中,两个项目project1和project2的编译路径,即输出目录和中间目录均是默认配置。

项目(鼠标右键)→属性→配置属性→常规

配置:所有配置意味着包括debug和release版本。编译平台为x64,即64位操作系统。

$(SolutionDir):解决方案名,即.sln所在路径

$(Platform):解决方案平台名称,如x86、x64

$(Configuration):当前的编译配置名称,如Release、Debug

$(ProjectName):当前工程(项目)名称,如示例中的project1,project2

(补充)我们可以在:项目(鼠标右键)→属性→配置属性→常规→输出目录(点击下拉箭头)→编辑→宏中看到相应名称和值的一一对应关系。

 然后我们将两个项目均运行编译,打开文件所在路径。

 

 

我们发现解决方案Project1中的文件生成结构如上所述。

我们在回想我们之前看到的项目默认配置路径。

默认情况下,跟project1、project2两个项目同级生成的debug是project1和project2的输出目录,即与.sln文件同级目录

 TIPS:解决方案平台默认是x64。所以默认配置情况下$(Platform)的作用透明。

project1、project2的中间目录,通俗的理解就是日志信息,每次编译项目都会增加中间目录所占大小。在默认情况下,中间目录生成路径会在每个项目中均有生成

这样的结果就会造成其中间目录和输出目录对源码的干扰性很大,当我们需要对源码进行打包发送给其他伙伴、同事的时候,我们本来只有几KB的源码,由于我们的工程中包含输出目录和中间目录使得我们的工程变成了几百MB,这样是非常不友好的。接下来,讲述如何通过手动配置工程编译路径避免这种情况的发生。


二、手动配置编译路径

先在解决方案project2中创建两个项目,分别是project1、project2,同上

 但是其输出目录和中间目录我们将手动更改,切换为所有配置所有平台

这样做意味着不管是x64或者x86平台我们都可进行指定目录生成。

项目(鼠标右键)→属性→配置属性→常规→输出目录/中间目录

输出目录:$(SolutionDir)..\bin\$(Platform)\$(Configuration)\
中间目录:$(SolutionDir)..\temp\$(Platform)\$(Configuration)\$(ProjectName)\

紧接着,点击确定即可。

我们将两个项目进行编译运行,打开文件所在路径。

 

我们发现经过我们手动配置编译路径,跟解决方案Project2同级的目录下生成了bin、temp目录。

bin目录

Win64意味着我们编译的平台是64位操作系统,对应我们手动配置的$(Platform)。

Debug意味着我们的配置是Debug模式。对应我们手动配置的$(Configuration)。 

Debug路径下对应的就是我们的输出目录,其中包括project1、project2项目在debug模式下生成的exe文件及附带文件。

temp目录

Win64意味着我们编译的平台是64位操作系统,对应我们手动配置的$(Platform)。 

Debug意味着我们的配置是Debug模式。对应我们手动配置的$(Configuration)。

 Project1、Project2就是两个项目生成的中间目录,通俗的说就是项目对应的日志文件信息。对应我们手动配置的$(ProjectName)。

 

解决方案目录 

我们再打开我们的解决方案目录。

发现只有两个项目。 

 

 其中项目project1、project2中只保留最基本的配置,以及源码。

总结

我们应当避免其他文件(如输出目录、中间目录等)对程序源码的干扰,为了保证源码管理整洁干净,我们务必手动配置编译输出路径。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 内核上机指导 2 1.1 下载和使用WDK 2 1.1.1 下载并安装WDK 2 1.1.2 编写第一个C文件 4 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 8 1.3 调试内核模块 9 1.3.1 下载和安装WinDbg 9 1.3.2 设置Windows XP调试执行 9 1.3.3 设置Vista调试执行 10 1.3.4 设置VMware的管道虚拟串口 11 1.3.5 设置Windows内核符号表 12 1.3.6 实战调试first 13 第2章 内核编程环境及其特殊性 16 2.1 内核编程的环境 16 2.1.1 隔离的应用程序 16 2.1.2 共享的内核空间 17 2.1.3 无处不在的内核模块 18 2.2 数据类型 19 2.2.1 基本数据类型 19 2.2.2 返回状态 19 2.2.3 字符串 20 2.3 重要的数据结构 21 2.3.1 驱动对象 21 2.3.2 设备对象 22 2.3.3 请求 24 2.4 函数调用 25 2.4.1 查阅帮助 25 2.4.2 帮助中有的几类函数 26 2.4.3 帮助中没有的函数 28 2.5 Windows的驱动开发模型 29 2.6 WDK编程中的特殊点 30 2.6.1 内核编程的主要调用源 30 2.6.2 函数的多线程安全性 30 2.6.3 代码的中断级 32 2.6.4 WDK中出现的特殊代码 32 第3章 字符串与链表 35 3.1 字符串操作 35 3.1.1 使用字符串结构 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷贝 37 3.1.4 字符串的连接 38 3.1.5 字符串的打印 38 3.2 内存与链表 40 3.2.1 内存的分配与释放 40 3.2.2 使用LIST_ENTRY 41 3.2.3 使用长长整型数据 43 3.3 自旋锁 44 3.3.1 使用自旋锁 44 3.3.2 在双向链表中使用自旋锁 45 3.3.3 使用队列自旋锁提高性能 46 第4章 文件、注册表、线程 47 4.1 文件操作 47 4.1.1 使用OBJECT_ATTRIBUTES 47 4.1.2 打开和关闭文件 48 4.1.3 文件读/写操作 51 4.2 注册表操作 53 4.2.1 注册表键的打开 53 4.2.2 注册表键值的读 55 4.2.3 注册表键值的写 57 4.3 时间与定时器 58 4.3.1 获得当前“滴答”数 58 4.3.2 获得当前系统时间 58 4.3.3 使用定时器 59 4.4 线程与事件 62 4.4.1 使用系统线程 62 4.4.2 在线程中睡眠 63 4.4.3 使用同步事件 64 第5章 应用与内核通信 67 5.1 内核方面的编程 68 5.1.1 生成控制设备 68 5.1.2 控制设备的名字和符号链接 70 5.1.3 控制设备的删除 71 5.1.4 分发函数 72 5.1.5 请求的处理 73 5.2 应用方面的编程 74 5.2.1 基本的功能需求 74 5.2.2 在应用程序中打开与关闭设备 75 5.2.3 设备控制请求 75 5.2.4 内核中的对应处理 77 5.2.5 结合测试的效果 79 5.3 阻塞、等待与安全设计 80 5.3.1 驱动主动通知应用 80 5.3.2 通信接口的测试 81 5.3.3 内核中的缓冲区链表结构 83 5.3.4 输入:内核中的请求处理中的安全检查 84 5.3.5 输出处理与卸载清理 85 第6章 64位和32位内核开发差异 88 6.1 64位系统新增机制 88 6.1.1 WOW64子系统 88 6.1.2 PatchGuard技术 91 6.1.3 64位驱动的编译、安装与运行 91 6.2 编程差异 92 6.2.1 汇编嵌入变化 92 6.2.2 预处理与条件编译 93 6.2.3 数据结构调整 93 开 发 篇 第7章 串口的过滤 96 7.1 过滤的概念 96 7.1.1 设备绑定的内核API之一 97 7.1.2 设备绑定的内核API之二 98 7.1.3 生成过滤设备并绑定 98 7.1.4 从名字获得设备对象 100 7.1.5 绑定所有串口 101 7.2 获得实际数据 102 7.2.1 请求的区分 102 7.2.2 请求的结局 103 7.2.3 写请求的数据 104 7.3 完整的代码 105 7.3.1 完整的分发函数 105 7.3.2 如何动态卸载 106 7.3.3 代码的编译与运行 107 第8章 键盘的过滤 109 8.1 技术原理 110 8.1.1 预备知识 110 8.1.2 Windows中从击键到内核 110 8.1.3 键盘硬件原理 112 8.2 键盘过滤的框架 112 8.2.1 找到所有的键盘设备 112 8.2.2 应用设备扩展 115 8.2.3 键盘过滤模块的DriverEntry 117 8.2.4 键盘过滤模块的动态卸载 117 8.3 键盘过滤的请求处理 119 8.3.1 通常的处理 119 8.3.2 PNP的处理 120 8.3.3 读的处理 121 8.3.4 读完成的处理 122 8.4 从请求中打印出按键信息 123 8.4.1 从缓冲区中获得KEYBOARD_INPUT_DATA 123 8.4.2 从KEYBOARD_INPUT_DATA中得到键 124 8.4.3 从MakeCode到实际字符 124 8.5 Hook分发函数 126 8.5.1 获得类驱动对象 126 8.5.2 修改类驱动的分发函数指针 127 8.5.3 类驱动之下的端口驱动 128 8.5.4 端口驱动和类驱动之间的协作机制 129 8.5.5 找到关键的回调函数的条件 129 8.5.6 定义常数和数据结构 130 8.5.7 打开两种键盘端口驱动寻找设备 131 8.5.8 搜索在KbdClass类驱动中的地址 133 8.6 Hook键盘中断反过滤 135 8.6.1 中断:IRQ和INT 136 8.6.2 如何修改IDT 136 8.6.3 替换IDT中的跳转地址 137 8.6.4 QQ的PS/2反过滤措施 139 8.7 直接用端口操作键盘 139 8.7.1 读取键盘数据和命令端口 139 8.7.2 p2cUserFilter的最终实现 140 第9章 磁盘的虚拟 143 9.1 虚拟的磁盘 143 9.2 一个具体的例子 143 9.3 入口函数 144 9.3.1 入口函数的定义 144 9.3.2 Ramdisk驱动的入口函数 145 9.4 EvtDriverDeviceAdd函数 146 9.4.1 EvtDriverDeviceAdd的定义 146 9.4.2 局部变量的声明 146 9.4.3 磁盘设备的创建 147 9.4.4 如何处理发往设备的请求 148 9.4.5 用户配置的初始化 149 9.4.6 链接给应用程序 151 9.4.7 小结 152 9.5 FAT12/16磁盘卷初始化 152 9.5.1 磁盘卷结构简介 152 9.5.2 Ramdisk对磁盘的初始化 154 9.6 驱动中的请求处理 160 9.6.1 请求的处理 160 9.6.2 读/写请求 160 9.6.3 DeviceIoControl请求 162 9.7 Ramdisk的编译和安装 164 9.7.1 编译 164 9.7.2 安装 164 9.7.3 对安装的深入探究 165 第10章 磁盘的过滤 167 10.1 磁盘过滤驱动的概念 167 10.1.1 设备过滤和类过滤 167 10.1.2 磁盘设备和磁盘卷设备过滤驱动 167 10.1.3 注册表和磁盘卷设备过滤驱动 168 10.2 具有还原功能的磁盘卷过滤驱动 168 10.2.1 简介 168 10.2.2 基本思想 169 10.3 驱动分析 169 10.3.1 DriverEntry函数 169 10.3.2 AddDevice函数 170 10.3.3 PnP请求的处理 174 10.3.4 Power请求的处理 178 10.3.5 DeviceIoControl请求的处理 178 10.3.6 bitmap的作用和分析 182 10.3.7 boot驱动完成回调函数和稀疏文件 187 10.3.8 读/写请求的处理 190 第11章 文件系统的过滤与监控 199 11.1 文件系统的设备对象 200 11.1.1 控制设备与卷设备 200 11.1.2 生成自己的一个控制设备 201 11.2 文件系统的分发函数 202 11.2.1 普通的分发函数 202 11.2.2 文件过滤的快速IO分发函数 203 11.2.3 快速IO分发函数的一个实现 205 11.2.4 快速IO分发函数逐个简介 206 11.3 设备的绑定前期工作 207 11.3.1 动态地选择绑定函数 207 11.3.2 注册文件系统变动回调 208 11.3.3 文件系统变动回调的一个实现 209 11.3.4 文件系统识别器 211 11.4 文件系统控制设备的绑定 212 11.4.1 生成文件系统控制设备的过滤设备 212 11.4.2 绑定文件系统控制设备 213 11.4.3 利用文件系统控制请求 215 11.5 文件系统卷设备的绑定 217 11.5.1 从IRP中获得VPB指针 217 11.5.2 设置完成函数并等待IRP完成 218 11.5.3 卷挂载IRP完成后的工作 221 11.5.4 完成函数的相应实现 223 11.5.5 绑定卷的实现 224 11.6 读/写操作的过滤 226 11.6.1 设置一个读处理函数 226 11.6.2 设备对象的区分处理 227 11.6.3 解析读请求中的文件信息 228 11.6.4 读请求的完成 230 11.7 其他操作的过滤 234 11.7.1 文件对象的生存周期 234 11.7.2 文件的打开与关闭 235 11.7.3 文件的删除 237 11.8 路径过滤的实现 238 11.8.1 取得文件路径的三种情况 238 11.8.2 打开成功后获取路径 238 11.8.3 在其他时刻获得文件路径 240 11.8.4 在打开请求完成之前获得路径名 240 11.8.5 把短名转换为长名 242 11.9 把sfilter编译成静态库 243 11.9.1 如何方便地使用sfilter 243 11.9.2 初始化回调、卸载回调和绑定回调 244 11.9.3 绑定与回调 245 11.9.4 插入请求回调 246 11.9.5 如何利用sfilter.lib 249 第12章 文件系统透明加密 252 12.1 文件透明加密的应用 252 12.1.1 防止企业信息泄密 252 12.1.2 文件透明加密防止企业信息泄密 253 12.1.3 文件透明加密软件的例子 253 12.2 区分进程 254 12.2.1 机密进程与普通进程 254 12.2.2 找到进程名字的位置 255 12.2.3 得到当前进程的名字 256 12.3 内存映射与文件缓冲 257 12.3.1 记事本的内存映射文件 257 12.3.2 Windows的文件缓冲 258 12.3.3 文件缓冲:明文还是密文的选择 259 12.3.4 清除文件缓冲 260 12.4 加密标识 263 12.4.1 保存在文件外、文件头还是文件尾 263 12.4.2 隐藏文件头的大小 264 12.4.3 隐藏文件头的设置偏移 266 12.4.4 隐藏文件头的读/写偏移 267 12.5 文件加密表 267 12.5.1 何时进行加密操作 267 12.5.2 文件控制块与文件对象 268 12.5.3 文件加密表的数据结构与初始化 269 12.5.4 文件加密表的操作:查询 270 12.5.5 文件加密表的操作:添加 271 12.5.6 文件加密表的操作:删除 272 12.6 文件打开处理 273 12.6.1 直接发送IRP进行查询与设置操作 274 12.6.2 直接发送IRP进行读/写操作 276 12.6.3 文件的非重入打开 277 12.6.4 文件的打开预处理 280 12.7 读/写加密和解密 285 12.7.1 在读取时进行解密 285 12.7.2 分配与释放MDL 286 12.7.3 写请求加密 287 12.8 crypt_file的组装 289 12.8.1 crypt_file的初始化 289 12.8.2 crypt_file的IRP预处理 290 12.8.3 crypt_file的IRP后处理 293 第13章 文件系统微过滤驱动 297 13.1 文件系统微过滤驱动简介 297 13.1.1 文件系统微过滤驱动的由来 297 13.1.2 Minifilter的优点与不足 298 13.2 Minifilter的编程框架 298 13.2.1 微文件系统过滤的注册 299 13.2.2 微过滤器的数据结构 300 13.2.3 卸载回调函数 303 13.2.4 预操作回调函数 303 13.2.5 后操作回调函数 306 13.2.6 其他回调函数 307 13.3 Minifilter如何与应用程序通信 309 13.3.1 建立通信端口的方法 310 13.3.2 在用户态通过DLL使用通信端口的范例 311 13.4 Minifilter的安装与加载 314 13.4.1 安装Minifilter的INF文件 314 13.4.2 启动安装完成的Minifilter 316 第14章 网络传输层过滤 317 14.1 TDI概要 317 14.1.1 为何选择TDI 317 14.1.2 从socket到Windows内核 318 14.1.3 TDI过滤的代码例子 319 14.2 TDI的过滤框架 319 14.2.1 绑定TDI的设备 319 14.2.2 唯一的分发函数 320 14.2.3 过滤框架的实现 322 14.2.4 主要过滤的请求类型 323 14.3 生成请求:获取地址 324 14.3.1 过滤生成请求 324 14.3.2 准备解析IP地址与端口 326 14.3.3 获取生成的IP地址和端口 327 14.3.4 连接终端的生成与相关信息的保存 329 14.4 控制请求 330 14.4.1 TDI_ASSOCIATE_ADDRESS的过滤 330 14.4.2 TDI_CONNECT的过滤 332 14.4.3 其他的次功能号 333 14.4.4 设置事件的过滤 334 14.4.5 TDI_EVENT_CONNECT类型的设置事件的过滤 336 14.4.6 直接获取发送函数的过滤 337 14.4.7 清理请求的过滤 339 14.5 本书例子tdifw.lib的应用 341 14.5.1 tdifw库的回调接口 341 14.5.2 tdifw库的使用例子 342 第15章 Windows过滤平台 345 15.1 WFP简介 345 15.2 WFP框架 345 15.3 基本对象模型 347 15.3.1 过滤引擎 347 15.3.2 垫片 347 15.3.3 呼出接口 347 15.3.4 分层 348 15.3.5 子层 349 15.3.6 过滤器 350 15.3.7 呼出接口回调函数 354 15.4 WFP操作 359 15.4.1 呼出接口的注册与卸载 360 15.4.2 呼出接口的添加与移除 360 15.4.3 子层的添加与移除 361 15.4.4 过滤器的添加 362 15.5 WFP过滤例子 362 第16章 NDIS协议驱动 370 16.1 以太网包和网络驱动架构 370 16.1.1 以太网包和协议驱动 370 16.1.2 NDIS网络驱动 371 16.2 协议驱动的DriverEntry 372 16.2.1 生成控制设备 372 16.2.2 注册协议 374 16.3 协议与网卡的绑定 375 16.3.1 协议与网卡的绑定概念 375 16.3.2 绑定回调处理的实现 376 16.3.3 协议绑定网卡的API 378 16.3.4 解决绑定竞争问题 379 16.3.5 分配接收和发送的包池与缓冲池 380 16.3.6 OID请求的发送和请求完成回调 381 16.3.7 ndisprotCreateBinding的最终实现 385 16.4 绑定的解除 390 16.4.1 解除绑定使用的API 390 16.4.2 ndisprotShutdownBinding的实现 392 16.5 在用户态操作协议驱动 395 16.5.1 协议的收包与发包 395 16.5.2 在用户态编程打开设备 396 16.5.3 用DeviceIoControl发送控制请求 397 16.5.4 用WriteFile发送数据包 399 16.5.5 用ReadFile发送数据包 400 16.6 在内核态完成功能的实现 402 16.6.1 请求的分发与实现 402 16.6.2 等待设备绑定完成与指定设备名 402 16.6.3 指派设备的完成 403 16.6.4 处理读请求 406 16.6.5 处理写请求 408 16.7 协议驱动的接收回调 412 16.7.1 和接收包有关的回调函数 412 16.7.2 ReceiveHandler的实现 413 16.7.3 TransferDataCompleteHandler的实现 417 16.7.4 ReceivePacketHandler的实现 418 16.7.5 接收数据包的入队 420 16.7.6 接收数据包的出队和读请求的完成 422 第17章 NDIS小端口驱动 427 17.1 小端口驱动的应用与概述 427 17.1.1 小端口驱动的应用 427 17.1.2 小端口驱动示例 428 17.1.3 小端口驱动的运作与编程概述 429 17.2 小端口驱动的初始化 429 17.2.1 小端口驱动的DriverEntry 429 17.2.2 小端口驱动的适配器结构 431 17.2.3 配置信息的读取 433 17.2.4 设置小端口适配器上下文 433 17.2.5 MPInitialize的实现 434 17.2.6 MPHalt的实现 437 17.3 打开ndisprot设备 438 17.3.1 IO目标 438 17.3.2 给IO目标发送DeviceIoControl请求 439 17.3.3 打开ndisprot接口并完成配置设备 441 17.4 使用ndisprot发送包 443 17.4.1 小端口驱动的发包接口 443 17.4.2 发送控制块(TCB) 444 17.4.3 遍历包组并填写TCB 446 17.4.4 写请求的构建与发送 449 17.5 使用ndisprot接收包 451 17.5.1 提交数据包的内核API 451 17.5.2 从接收控制块(RCB)提交包 452 17.5.3 对ndisprot读请求的完成函数 454 17.5.4 读请求的发送 456 17.5.5 用于读包的WDF工作任务 457 17.5.6 ndisedge读工作任务的生成与入列 459 17.6 其他的特征回调函数的实现 461 17.6.1 包的归还 461 17.6.2 OID查询处理的直接完成 462 17.6.3 OID设置处理 465 第18章 NDIS中间层驱动 467 18.1 NDIS中间层驱动概述 467 18.1.1 Windows网络架构总结 467 18.1.2 NDIS中间层驱动简介 468 18.1.3 NDIS中间层驱动的应用 469 18.1.4 NDIS包描述符结构深究 470 18.2 中间层驱动的入口与绑定 473 18.2.1 中间层驱动的入口函数 473 18.2.2 动态绑定NIC设备 474 18.2.3 小端口初始化(MpInitialize) 475 18.3 中间层驱动发送数据包 477 18.3.1 发送数据包原理 477 18.3.2 包描述符“重利用” 478 18.3.3 包描述符“重申请” 481 18.3.4 发送数据包的异步完成 482 18.4 中间层驱动接收数据包 484 18.4.1 接收数据包概述 484 18.4.2 用PtReceive接收数据包 485 18.4.3 用PtReceivePacket接收 490 18.4.4 对包进行过滤 491 18.5 中间层驱动程序查询和设置 494 18.5.1 查询请求的处理 494 18.5.2 设置请求的处理 496 18.6 NDIS句柄 498 18.6.1 不可见的结构指针 498 18.6.2 常见的NDIS句柄 499 18.6.3 NDIS句柄误用问题 500 18.6.4 一种解决方案 502 18.7 生成普通控制设备 503 18.7.1 在中间层驱动中添加普通设备 503 18.7.2 使用传统方法来生成控制设备 505 第19章 IA-32汇编基础 511 19.1 x86内存、寄存器与堆栈 511 19.1.1 _asm关键字 511 19.1.2 x86中的mov指令 512 19.1.3 x86中的寄存器与内存 512 19.1.4 赋值语句的实现 513 19.2 x86中函数的实现 514 19.2.1 一个函数的例子 514 19.2.2 堆栈的介绍 515 19.2.3 寄存器的备份和恢复 516 19.2.4 内部变量与返回值 518 19.3 x86中函数的调用与返回 521 19.3.1 函数的调用指令call 521 19.3.2 通过堆栈传递参数 521 19.3.3 从函数返回 523 19.3.4 三种常见的调用协议 524 19.4 从32位汇编到64位汇编 526 19.4.1 Intel 64与IA-32体系架构简介 526 19.4.2 64位指令与32位指令 526 19.4.3 通用寄存器 527 19.5 64位下的函数实现 528 19.5.1 函数概览 528 19.5.2 32位参数的传递 529 19.5.3 64位参数与返回值 530 19.5.4 栈空间的开辟与恢复 531 第20章 IA-32体系中的内存地址 534 20.1 内存的虚拟地址 534 20.1.1 C语言中的内存地址 534 20.1.2 虚拟地址的构成 535 20.1.3 段的选择 536 20.2 全局描述符表和段描述符 538 20.2.1 全局描述符表 538 20.2.2 段类型 539 20.2.3 段寄存器与段选择子 540 20.2.4 64位模式下的段 541 20.3 分段编程实践 542 20.3.1 系统表寄存器的结构 542 20.3.2 在汇编语言中获取全局描述表的位置 543 20.3.3 调试范例:sgdt指令的错误使用 545 20.3.4 在64位下获得全局描述符表 547 20.4 线性地址基础 549 20.4.1 分页控制机制 550 20.4.2 线性地址的转换 551 20.4.3 混合页面大小 552 20.4.4 32位物理地址的页目录和页表项 552 20.5 各种特殊分页方式 555 20.5.1 PAE分页方式 555 20.5.2 PSE-36分页机制 558 20.5.3 IA-32e模式下的线性地址 559 20.6 分页编程实践 562 20.6.1 页目录和页目录指针表的获取 562 20.6.2 页表的获取 564 20.6.3 线性地址的结构 567 第21章 处理器权限级别切换 571 21.1 Ring0和Ring3权限级别 571 21.2 保护模式下的分页内存保护 572 21.3 分页内存不可执行保护 574 21.3.1 不可执行保护原理 574 21.3.2 不可执行保护的漏洞 575 21.3.3 上机实践 577 21.4 权限级别的切换 579 21.4.1 调用门及其漏洞 579 21.4.2 sysenter和sysexit指令 581 21.4.3 上机实践 583 第22章 IA-32体系结构中的中断 585 22.1 中断基础知识 585 22.1.1 中断描述符表 585 22.1.2 中断处理过程 587 22.1.3 64位模式下的中断处理机制 589 22.1.4 多核下的中断 589 22.2 Windows中断机制 593 22.3 中断编程实践 596 22.3.1 IDT Hook 596 22.3.2 巧用IDT Hook实现安全防护 598 第23章 Windows内核挂钩 601 23.1 系统服务描述符表挂钩 602 23.1.1 系统服务描述符表(SSDT) 602 23.1.2 系统服务描述符表挂钩的意图 603 23.1.3 寻找要挂钩的函数的地址 604 23.1.4 函数被挂钩的过程 605 23.1.5 具体实现的代码 606 23.2 函数导出表挂钩 608 23.2.1 内核函数的种类 608 23.2.2 挂钩IoCallDriver 610 23.2.3 对跳转地址进行修改 611 23.3 Windows 7系统下IofCallDriver的跟踪 612 23.4 Windows 7系统下内联挂钩 615 23.4.1 写入跳转指令并拷贝代码 615 23.4.2 实现中继函数 617 高 级 篇 第24章 Windows通知与回调 620 24.1 Windows的事件通知与回调 620 24.2 常用的事件通知 620 24.2.1 创建进程通知 621 24.2.2 创建线程通知 625 24.2.3 加载模块通知 626 24.2.4 注册表操作通知 629 24.3 Windows回调机制 636 24.3.1 回调对象 636 24.3.2 回调对象的创建 637 24.3.3 回调对象的注册 637 24.3.4 回调的通告 638 24.4 安全的死角,回调的应用 639 第25章 保护进程 640 25.1 内核对象简介 640 25.2 内核对象的结构 641 25.3 保护内核对象 642 25.3.1 处理对象的打开 643 25.3.2 处理句柄的复制 644 25.3.3 处理句柄的继承 646 25.4 进程的保护 652 25.4.1 保护原理 652 25.4.2 Vista以后的进程对象保护 654 25.4.3 进程的其他保护 655 附录A 如何使用本书的源码光盘 656 附录B 练习题 659
Editplus 3[1].0 正则表达式类 【1】 正则表达式应用——替换指定内容到行尾 【2】 正则表达式应用——数字替换----------------------------Microshaoft@CCF,jiuk2k@CCF 【3】 正则表达式应用——删除每一行行尾的指定字符 【4】 正则表达式应用——替换带有半角括号的多行 【5】 正则表达式应用——删除空行----------------------------江德华 软件技巧类 ------------------------------------------------------ 【6】 软件技巧——键盘记录的注意事项 【7】 软件技巧——关闭文档标签的便捷方法 【8】 软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 【9】 软件技巧——提示找不到语法文件的解决办法 【10】软件技巧——设置editplus支持其它文字,如韩文----------jackywu1978@LJF 【11】软件技巧——FTP 上传的设置----------------------------李应文2.11汉化版 【12】软件技巧——如何禁用备份文件功能? 【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 工具集成类 ------------------------------------------------------ 【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis、C#) 【15】工具集成——让Editplus调试PHP程序----------------------avenger,aukw@CCF 【16】工具集成——打造 PHP 调试环境(二)----------------------老七2.11汉化版 【17】在 WINPE 中集成 EDITPLUS 后续添加 ------------------------------------------------------ 【18】支持带UTF-8标记/不带UTF-8标记的文件 每个步骤都说得很详细了,就没有必要贴图了,体积不要太大才好。 【1】正则表达式应用——替换指定内容到行尾 原始文本如下面两行 abc aaaaa 123 abc 444 希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg” 即上面的文本最终替换为: abc efg 123 abc efg 解决: ① 在替换对话框,查找内容里输入“abc.*” ② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮 其中,符号的含义如下: “.” =匹配任意字符 “*” =匹配0次或更多 注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。 【2】正则表达式应用——数字替换 (Microshaoft@CCF,jiuk2k@CCF) 希望把 asdadas123asdasdas456asdasdasd789asdasd 替换为: asdadas[123]asdasdas[456]asdasdasd[789]asdasd 在替换对话框里面,勾选“正则表达式”复选框; 在查找内容里面输入“[0-9][0-9][0-9]”,不含引号 “替换为:”里面输入“[\0\1\2]”,不含引号 范围为你所操作的范围,然后选择替换即可。 实际上这也是正则表达式的使用特例,“[0-9]”表示匹配0~9之间的任何特例,同样“[a-z]”就表示匹配a~z之间的任何特例 上面重复使用了“[0-9]”,表示连续出现的三个数字 “\0”代表第一个“[0-9]”对应的原型,“\1”代表第二个“[0-9]”对应的原型,依此类推 “[”、“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它\0\1\2其它”,则替换结果为: asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd 功能增强(by jiuk2k@CCF): 如果将查找内容“[0-9][0-9][0-9]”改为“[0-9]*[0-9]”,对应1 或 123 或 12345 或 ... 大家根据需要定制 相关内容还有很多,可以自己参考正则表达式的语法仔细研究一下 【3】正则表达式应用——删除每一行行尾的指定字符 因为这几个字符在行中也是出现的,所以肯定不能用简单的替换实现 比如 12345 1265345 2345 需要删除每行末尾的“345” 这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表
已经破解的代码编辑器,免安装的里面有破解的注册码 很小但是功能却很强大,编辑网页可以随时预览,能够多人工作。 附使用手册: Editplus使用技巧 技巧中,在编译器集成例子中参照了部分官方的文献。有几篇是从网上搜集来的,这里我注明了来源或原始作者。如果你是相应作者,不希望文章放在这里,请通知我,我会及时 删掉。 —————————————————— 文章或者技巧及原始作者或出处: 正则表达式类 【1】 正则表达式应用——替换指定内容到行尾 【2】 正则表达式应用——数字替换—————————-Microshaoft,jiuk2k 【3】 正则表达式应用——删除每一行行尾的指定字符 【4】 正则表达式应用——替换带有半角括号的多行 【5】 正则表达式应用——删除空行—————————-江德华 软件技巧类 —————————————————— 【6】 软件技巧——键盘记录的注意事项 【7】 软件技巧——关闭文档标签的便捷方法 【8】 软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 【9】 软件技巧——提示找不到语法文件的解决办法 【10】软件技巧——设置editplus支持其它文字,如韩文———-jackywu1978 【11】软件技巧——FTP 上传的设置—————————-李应文2.11汉化版 【12】软件技巧——如何禁用备份文件功能? 【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 工具集成类 —————————————————— 【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis、C#) 【15】工具集成——让Editplus调试PHP程序———————-avenger,aukw 【16】工具集成——打造 PHP 调试环境(二)———————-老七2.11汉化版 【17】在 WINPE 中集成 EDITPLUS 【1】正则表达式应用——替换指定内容到行尾 原始文本如下面两行 abc aaaaa 123 abc 444 希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg” 即上面的文本最终替换为: abc efg 123 abc efg 解决: ① 在替换对话框,查找内容里输入“abc.*” ② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮 其中,符号的含义如下: “.” =匹配任意字符 “*” =匹配0次或更多 注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。 【2】正则表达式应用——数字替换 希望把 asdadas123asdasdas456asdasdasd789asdasd 替换为: asdadas[123]asdasdas[456]asdasdasd[789]asdasd 在替换对话框里面,勾选“正则表达式”复选框; 在查找内容里面输入“[0-9][0-9][0-9]”,不含引号 “替换为:”里面输入“[\0\1\2]”,不含引号 范围为你所操作的范围,然后选择替换即可。 实际上这也是正则表达式的使用特例,“[0-9]”表示匹配0~9之间的任何特例,同样“[a-z]”就表示匹配a~z之间的任何特例 【1】正则表达式应用——替换指定内容到行尾 原始文本如下面两行 abc aaaaa 123 abc 444 希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg” 即上面的文本最终替换为: abc efg 123 abc efg 解决: ① 在替换对话框,查找内容里输入“abc.*” ② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮 其中,符号的含义如下: “.” =匹配任意字符 “*” =匹配0次或更多 注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。 【2】正则表达式应用——数字替换 (Microshaoft@CCF,jiuk2k@CCF) 希望把 asdadas123asdasdas456asdasdasd789asdasd 替换为: asdadas[123]asdasdas[456]asdasdasd[789]asdasd 在替换对话框里面,勾选“正则表达式”复选框; 在查找内容里面输入“[0-9][0-9][0-9]”,不含引号 “替换为:”里面输入“[\0\1\2]”,不含引号 范围为你所操作的范围,然后选择替换即可。 实际上这也是正则表达式的使用特例,“[0-9]”表示匹配0~9之间的任何特例,同样“[a-z]”就表示匹配a~z之间的任何特例 上面重复使用了“[0-9]”,表示连续出现的三个数字 “\0”代表第一个“[0-9]”对应的原型,“\1”代表第二个“[0-9]”对应的原型,依此类推 “[”、“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它\0\1\2其它”,则替换结果为: asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd 功能增强(by jiuk2k@CCF): 如果将查找内容“[0-9][0-9][0-9]”改为“[0-9]*[0-9]”,对应1 或 123 或 12345 或 … 大家根据需要定制 相关内容还有很多,可以自己参考正则表达式的语法仔细研究一下 【3】正则表达式应用——删除每一行行尾的指定字符 因为这几个字符在行中也是出现的,所以肯定不能用简单的替换实现 比如 12345 1265345 2345 需要删除每行末尾的“345” 这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入“345$” 这里“$”表示从行尾匹配 如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串 a. 选择要操作的行 b. 编辑-格式-删除行注释 c. 在弹出对话框里面输入要清除的行首字符,确定 【4】正则表达式应用——替换带有半角括号的多行 几百个网页中都有下面一段代码: 我想把它们都去掉,可是找了很多search & replace的软件,都是只能对“一行”进行操作。 EditPlus 打开几百个网页文件还是比较顺畅的,所以完全可以胜任这个工作。 具体解决方法,在 Editplus 中使用正则表达式,由于“(”、“)”被用做预设表达式(或者可以称作子表达式)的标志,所以查找 “ \n” 时会提示查找不到,所以也就无法进行替换了,这时可以把“(”、“)”使用任意字符标记替代,即半角句号:“.”。替换内容为 \n 在替换对话框启用“正则表达式”选项,这时就可以完成替换了 补充:(lucida@DRL) 对( ) 这样的特殊符号,应该用\( \)来表示,这也是很标准的regexp语法,可以写为 \n 【5】正则表达式应用——删除空行 启动EditPlus,打开待处理的文本类型文件。 ①、选择“查找”菜单的“替换”命令,弹出文本替换对话框。选中“正则表达式”复选框,表明我们要在查找、替换中使用正则表达式。然后,选中“替换范围”中的“当前文件”,表明对当前文件操作。 ②、单击“查找内容”组合框右侧的按钮,出现下拉菜单。 ③、下面的操作添加正则表达式,该表达式代表待查找的空行。(技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。 直接在"查找"中输入正则表达式“^[ \t]*\n”,注意\t前有空格符。 (1)选择“从行首开始匹配”,“查找内容”组合框中出现字符“^”,表示待查找字符串必须出现在文本中一行的行首。 (2)选择“字符在范围中”,那么在“^”后会增加一对括号“[]”,当前插入点在括号中。括号在正则表达式中表示,文本中的字符匹配括号中任意一个字符即符合查找条件。 (3)按一下空格键,添加空格符。空格符是空行的一个组成成分。 (4)选择“制表符”,添加代表制表符的“\t”。 (5)移动光标,将当前插入点移到“]”之后,然后选择“匹配 0 次或更多”,该操作会添加星号字符“*”。星号表示,其前面的括号“[]”内的空格符或制表符,在一行中出现0个或多个。 (6)选择“换行符”,插入“\n”,表示回车符。 ④、“替换为”组合框保持空,表示删除查找到的内容。单击“替换”按钮逐个行删除空行,或单击“全部替换”按钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。 【6】软件技巧——键盘记录的注意事项 EditPlus的键盘记录有些类似于 UltraEdit 的宏操作,不过功能相对单一,录制的文件可编辑性较差。 由于基本无法编辑录制的文件,所以录制的时候为了避免录制失败,推荐纯粹使用键盘操作,以下是比较关键的几个键盘组合: Ctrl+F = 调出查找对话框 Ctrl+H = 调出替换对话框 Alt+F4 = 关闭作用,比如,关闭查找对话框、关闭替换对话框,等等 其它键盘快捷键在“帮助-快捷键列表”里面可以很容易的查找到,这里就 细说了。 【7】软件技巧——关闭文档标签的便捷方法 右键单击文档标签工具条,弹出菜单中选择“标签选项”,选中“用鼠标中间的按钮关闭”,这里包括鼠标的滚轮。 【8】软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 如果你使用 EditPlus 进行文本编辑,那么每次创建文本文件,编辑后保存时,尽管文件类型下拉列表中显示的是文本文件, EditPlus 还是询问你是否添加".txt"后缀,是不是很烦? 解决方法: ① 在程序目录建立一个空的文件“template.txt” ② “工具-参数设置-模板”里面,单击“添加”按钮添加模板,“菜单文本”这里输入“Text”,浏览“template.txt”,之后确定即可 ③ “文件-新建-text”,就可以建立一个空的文本文件,保存时,这个文件自动带有扩展名".txt",也就避免了令人头疼的确认 ④ 模板设置文件名称为“template.ini”,如果和主程序同一路径,可以使用相对路径 罗嗦了点,不过管用 要自动创建带有某种后缀的文件,方法同上。 【9】软件技巧——提示找不到语法文件 *.stx 的解决办法 原因多为设置的语法文件不存在或者是路径设置不对。这是因为 EditPlus 的语法是设置文件采用的是绝对路径,而在你设置了语法文件之后,再把程序复制到其它目录,因而导致 EditPlus 无法找到该语法文件。 解决办法: 在主程序目录里,找到 Setting.ini 这是 EditPlus 存放语法的文件 查找后缀为“.stx”、“acp”的文本内容,或者查找带有驱动器符号的行,比如 Syntax file=C:\Program Files\EditPlus 2\cpp.stx 那么,就把”C:\Program Files\EditPlus 2\“替换成你当前软件的路径。 其它提示找不到文件的解决方法同上 【10】软件技巧——设置editplus支持其它文字,如韩文 在editplus里打开文件,出来打开文件对话框;然后点击“转换器”后面的那个省略号,会出来自定义转换器对话框;在右边选择你需要的编码方式,添加到左边,然后点确定;最后在下拉框中选择需要的编码方式,然后打开文件即可。 【11】软件技巧——FTP 上传的设置 “文件->远程操作->FTP 上传”在“设置”选项卡中设置好参数(“子目录”前面应该加“/”如“/web/”),点击“确定”回到“FTP 上传”选项卡,然后点击“上传”即可;“批量上传”的设置类似。 【12】软件技巧——如何禁用备份文件功能? 在“参数选择”的文件选项页,禁用“'保存时自动创建备份文件”选项 【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 要添加 *.STX(语法文件)或 *.ACP(自动完成文件): 1. 选择“参数选择→语法” 2. 单击“添加”按钮,命名,在“扩展名”部分输入对应扩展名(不带“.”) 3. 浏览/输入 STX(语法文件部分) 以及 ACP(自动完成文件部分)。 添加剪辑库文件(*.CTL) 复制相应 *.CTL 文件到软件安装目录,重新启动 EditPlus ,则系统自动识别。 上面重复使用了“[0-9]”,表示连续出现的三个数字 “\0”代表第一个“[0-9]”对应的原型,“\1”代表第二个“[0-9]”对应的原型,依此类推 “[”、“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它\0\1\2其它”,则替换结果为: asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd 功能增强(by jiuk2k): 如果将查找内容“[0-9][0-9][0-9]”改为“[0-9]*[0-9]”,对应1 或 123 或 12345 或 … 大家根据需要定制 相关内容还有很多,可以自己参考正则表达式的语法仔细研究一下 【3】正则表达式应用——删除每一行行尾的指定字符 因为这几个字符在行中也是出现的,所以肯定不能用简单的替换实现 比如 12345 1265345 2345 需要删除每行末尾的“345” 这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入“345$” 这里“$”表示从行尾匹配 如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串 a. 选择要操作的行 b. 编辑-格式-删除行注释 c. 在弹出对话框里面输入要清除的行首字符,确定 【4】正则表达式应用——替换带有半角括号的多行 几百个网页中都有下面一段代码: \n 在替换对话框启用“正则表达式”选项,这时就可以完成替换了 【5】正则表达式应用——删除空行 启动EditPlus,打开待处理的文本类型文件。 ①、选择“查找”菜单的“替换”命令,弹出文本替换对话框。选中“正则表达式”复选框,表明我们要在查找、替换中使用正则表达式。然后,选中“替换范围”中的“当前文件”,表明对当前文件操作。 ②、单击“查找内容”组合框右侧的按钮,出现下拉菜单。 ③、下面的操作添加正则表达式,该表达式代表待查找的空行。(技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。 直接在”查找”中输入正则表达式“^[ \t]*\n”,注意\t前有空格符。 (1)选择“从行首开始匹配”,“查找内容”组合框中出现字符“^”,表示待查找字符串必须出现在文本中一行的行首。 (2)选择“字符在范围中”,那么在“^”后会增加一对括号“[]”,当前插入点在括号中。括号在正则表达式中表示,文本中的字符匹配括号中任意一个字符即符合查找条件。 (3)按一下空格键,添加空格符。空格符是空行的一个组成成分。 (4)选择“制表符”,添加代表制表符的“\t”。 (5)移动光标,将当前插入点移到“]”之后,然后选择“匹配 0 次或更多”,该操作会添加星号字符“*”。星号表示,其前面的括号“[]”内的空格符或制表符,在一行中出现0个或多个。 (6)选择“换行符”,插入“\n”,表示回车符。 ④、“替换为”组合框保持空,表示删除查找到的内容。单击“替换”按钮逐个行删除空行,或单击“全部替换”按钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。 【6】软件技巧——键盘记录的注意事项 EditPlus 的键盘记录有些类似于 UltraEdit 的宏操作,不过功能相对单一,录制的文件可编辑性较差。 由于基本无法编辑录制的文件,所以录制的时候为了避免录制失败,推荐纯粹使用键盘操作,以下是比较关键的几个键盘组合: Ctrl+F = 调出查找对话框 Ctrl+H = 调出替换对话框 Alt+F4 = 关闭作用,比如,关闭查找对话框、关闭替换对话框,等等 其它键盘快捷键在“帮助-快捷键列表”里面可以很容易的查找到,这里就 细说了。 【7】软件技巧——关闭文档标签的便捷方法 右键单击文档标签工具条,弹出菜单中选择“标签选项”,选中“用鼠标中间的按钮关闭”,这里包括鼠标的滚轮。 【8】软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 如果你使用 EditPlus 进行文本编辑,那么每次创建文本文件,编辑后保存时,尽管文件类型下拉列表中显示的是文本文件, EditPlus 还是询问你是否添加“.txt”后缀,是不是很烦? 解决方法: ① 在程序目录建立一个空的文件“template.txt” ② “工具-参数设置-模板”里面,单击“添加”按钮添加模板,“菜单文本”这里输入“Text”,浏览“template.txt”,之后确定即可 ③ “文件-新建-text”,就可以建立一个空的文本文件,保存时,这个文件自动带有扩展名”.txt”,也就避免了令人头疼的确认 ④ 模板设置文件名称为“template.ini”,如果和主程序同一路径,可以使用相对路径 罗嗦了点,不过管用 要自动创建带有某种后缀的文件,方法同上。 【9】软件技巧——提示找不到语法文件 *.stx 的解决办法 原因多为设置的语法文件不存在或者是路径设置不对。这是因为 EditPlus 的语法是设置文件采用的是绝对路径,而在你设置了语法文件之后,再把程序复制到其它目录,因而导致 EditPlus 无法找到该语法文件。 解决办法: 在主程序目录里,找到 Setting.ini 这是 EditPlus 存放语法的文件 查找后缀为“.stx”、“acp”的文本内容,或者查找带有驱动器符号的行,比如 Syntax file=C:\Program Files\EditPlus 2\cpp.stx 那么,就把”C:\Program Files\EditPlus 2\“替换成你当前软件的路径。 其它提示找不到文件的解决方法同上 【10】软件技巧——设置editplus支持其它文字,如韩文 在editplus里打开文件,出来打开文件对话框;然后点击“转换器”后面的那个省略号,会出来自定义转换器对话框;在右边选择你需要的编码方式,添加到左边,然后点确定;最后在下拉框中选择需要的编码方式,然后打开文件即可。 【11】软件技巧——FTP 上传的设置 “文件->远程操作->FTP 上传”在“设置”选项卡中设置好参数(“子目录”前面应该加“/”如“/web/”),点击“确定”回到“FTP 上传”选项卡,然后点击“上传”即可;“批量上传”的设置类似。 【12】软件技巧——如何禁用备份文件功能? 在“参数选择”的文件选项页,禁用“’保存时自动创建备份文件”选项 【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 要添加 *.STX(语法文件)或 *.ACP(自动完成文件): 1. 选择“参数选择→语法” 2. 单击“添加”按钮,命名,在“扩展名”部分输入对应扩展名(不带“.”) 3. 浏览/输入 STX(语法文件部分) 以及 ACP(自动完成文件部分)。 添加剪辑库文件(*.CTL) 复制相应 *.CTL 文件到软件安装目录,重新启动 EditPlus ,则系统自动识别。 【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis) 在“工具→参数选择→用户工具”选项页设置,设置步骤 设置组名称,这里也可以不设置 ② 单击“添加工具→应用程序”按钮并进行如下设置 ③ 各种类似”$(FilePath)”的参数可以在文本框右侧的箭头下拉菜单中获取,具体含义如下 参数 描述 $(FilePath) 文件路径文件全名,含目录文件名) $(FileDir) 文件目录(不带文件名) $(FileName) 文件名(不带目录) $(FileNameNoExt) 不带扩展名的文件名(不带目录) $(FileExt) 扩展名(当前文件) $(ProjectName) 工程名称(当前工程名) $(CurLine) 当前行号(光标位置处的行号) $(CurCol) 当前列号(光标位置处的列号) $(CurSel) 当前文本(插入当前选定文本) $(CurWord) 当前单词(插入当前单词) $(WindowList) 显示当前窗口列表并选择特定文件 例子 1. Java 编译器 菜单文本:Java 编译器 命令:c:\java\bin\javac.exe 参数:”$(FilePath)” 初始目录:$(FileDir) 捕获输出:开启 要运行已编译的 Java 类文件,你可以进行如下设置: 菜单文本:Java 命令:c:\java\bin\java.exe 参数:$(FileNameNoExt) 初始目录:$(FileDir) “命令”部分应当替换为实际的 Java 解释器的路径。 例子 2. Borland C++ 菜单文本:Borland C 命令:c:\bc\bin\bcc32.exe 参数:-Ic:\bc\include -Lc:\bc\lib -n$(FileDir) $(FilePath) 初始目录:c:\bc\bin 捕获输出:开启 例子 3. Visual C++ 菜单文本:Visual C++ 命令:c:\msdev\vc98\bin\cl.exe 参数:”$(FilePath)” 初始目录:$(FileDir) 捕获输出:开启 例子 4. Inno Setup 菜单文本:编译 Inno 命令:C:\Program Files\Inno Setup 4\Compil32.exe” 参数:/cc $(FileName) 初始目录:$(FileDir) 捕获输出:开启 例子 5. nsis 菜单文本:编译 nsis 命令:C:\NSIS\makensis.exe 参数:$(FileName) 初始目录:$(FileDir) 捕获输出:开启 例子 6. C# 菜单文本:编译 C# 命令:C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\csc.exe 参数:$(FileName) 初始目录:$(FileDir) 捕获输出:开启 在上面设置中,在命令部分,必须使用系统中各自编译器的绝对路径。 设置完毕后,你可以在“工具”菜单运行对应工具了,运行结果会显示在底部的输出窗口,你也可以通过快捷键(Ctrl + 0-9) 运行,或者是通过“用户工具栏”的快捷按钮运行。 要运行已编译的 *.exe 文件,你可以进行如下设置(此时可执行文件需要和编译文件同名): 菜单文本:Run 命令:$(FileNameNoExt) 参数: 初始目录:$(FileDir) 【15】工具集成—— 让Editplus调试PHP程序 1:打开Editplus,选择”工具->配置用户工具…”菜单。 2:在弹出的窗口中选择”添加工具->应用程序”,给新程序起一个好记的名字,比如这里我们用”Debug PHP”,在”菜单文本”中输入”Debug PHP”。点击”命令行”右边的按钮,找到你的php.exe所在的路径,例如这里是”c:\php\php.exe”。再点击”参数”右边的下拉按钮选择”文件路径”,最后再把”捕获输出”前面的复选框选上。 3:现在测试一下,新建一个php文件,按快捷键Ctrl+1可以激活刚才我们设置的工具(如果你设置了多个工具,快捷键可能会有所不同),现在你可以看到它已经能正常工作了。但是还有一点不太理想:如果你的PHP程序出错,在输出窗口会提示你第几行出错 ,单击这一行提示,Editplus老是提示你找不到某某文件,是否新建。接下下我们要修正这个功能。 4:打开刚才用户工具设置窗口,找到刚才设置的”Debug PHP”工具。点击”捕获输出”复选框旁边的”输出模式”按钮,会弹出一个定义输出模式的窗体,把”使用默认输出模式”前面的复选框去掉, 在”正则表达式”这一项的文本框中输入” ^.+ in (.+) line ([0-9]+) “(不包括引号),细心的朋友可能会发现,这里使用的也正则表达式的语法。然后,在下面的”文件名”下拉菜单中选择”预设表达式 1″,即上边正则表达式中的第一个参数,”行”下拉菜单项选择”预设表达式 2″,”列”下拉项保持为空。然后保存设置。 5:好了,现在再来试一下吧,双击出错的行数,Editplus就会自动激活出错文件,并把光标定位到出错行,是不是特别方便呢?! 现在,Editplus经过我们的”改造“,已经可以即时的调试PHP文件了,虽然还不是”可视化”界面的,但对于一些平常的小程序来查错还是非常好用的。Editplus真是 款不可多得的好工具,如果你有什么使用技巧,不要忘了大家一起分享哦。^O^ 如果不能切换错误行号,请尝试作如下修改: (by aukw) 1.php.ini 中html_errors = Off打开 //如果你不打开,3.中的表达式要修改 2.参数改成:-q -f “$(FilePath)” //不加“符号的话文件名有空格的文件调试失败。。 //-q不输出html头信息,你去掉也行,不过调试时候你一般用不到那些header信息 3.” ^.+ in (.+) line ([0-9]+) ” 改成 “^.+ in (.+) on line ([0-9]+)$” //如果还是不行,请注意调试结果,自己修改表达式来取出文件名和行号 【16】工具集成——打造 PHP 调试环境(二) 1: 把剪辑库定位在 PHP4 Functions 上就可以在编辑时, 利用[插入]->[匹配剪辑]命令,就可以自动完成末输入完整的 PHP 函数(或直接按 F2 键) 2: 类似上面,在选择部分文字后,同样可以自动完成。(同 F2) 3: 在[参数选择]->[设置和语法]->PHP->自动完成, 选择目录下的 php.acp 文件,你可以定制自己的自动完成方式. 4: 想要即时预览文件,可在[参数选择]->[工具]->WEB 服务器中添加本地目录,(注意不要加 http:// , 应是一个有效的站点)。     如: 主机->localhost/php 根目录->D:\php 主机->localhost/asp 根目录->D:\asp 主机->localhost/cgi 根目录->D:\cgi 完成设置后只要脚本文件位于这些目录下(子目录也没问题), 就能够正确解释. 5: 各种语法和模板文件可以在 www.editplus.com 获得,可根据需要选用和编辑。 6: Ctrl+F11 可显示当前文件中的函数列表. 7: 添加各种用户工具.如: 启动MYSQL服务器管理工具->C:\mysql\bin\winmysqladmin.exe 启动Apache服务器->C:\Apache\bin\Apache.exe -k start 启动Apache服务器->C:\Apache\bin\Apache.exe -k stop (shutdown) 8: DBG 附带有一个 prof_results.php 文件,可剖析 PHP 程序的性能. 虽不是真正的调试器,但已经够了. OK! 经过改造后,是不是有点象一个 IDE 什么?还差点,没有即时帮助…看我的,再来: 9: 把 php_manual_en.chm (最好是扩展帮助手册)加入到用户工具中, 当遇到需要参考的关键字时, 把光标定位其上, 按下快捷键 Ctrl+1, 看到了吗. 在输入时有想不起来的函数名时, 先按照第 1 条的方法调出函数, 然后…怎么样? 以上有的是对于调试工具的设置,由于此类工具比较多,大家设置时参考以上的基本就差不多了,所以就不过多的列举了。 【17】在 WINPE 中集成 EDITPLUS 可以基于目前的bartpe做得WINPE中,菜单使用nu2menu制作 默认位置为 \programs\editplus\ 默认系统位置为光盘的 i386 目录 i386/system32 的 autorun.bat 中添加外壳集成(系统右键) regedit /s %SystemDrive%\programs\editplus\REG.REG regsvr32 /s \programs\editplus\EPPSHELL.DLL 复制editplus安装包里面的文件到programs\editplus\,注意,如果有setting.ini,删掉该文件在nu2menu里面加入,可以根据需要安排位于特定菜单条目下 FUNC=”@GetProgramDrive()\Programs\EditPlus\editplus.exe”>本编辑
代码静态分析工具PC-LINT安装配置 PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。 C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。PCLint识别并报告C语言中的编程陷阱和格式缺陷的发生。它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,等等。软件除错是软件项目开发成本和延误的主要因素。PClint能够帮你在程序动态测试之前发现编码错误。这样消除错误的成本更低。 使用PC-Lint在代码走读和单元测试之前进行检查,可以提前发现程序隐藏错误,提高代码质量,节省测试时间。并提供编码规则检查,规范软件人员的编码行为。 由于PC-LINT对于一般程序员来说可能比较陌生,有好多人安装了也不知道怎样配置和使用。 下面我就根据自己的安装和配置心得对PC-Lint的安装、配置及使用进行下详细说明.本人主要介绍了将PC-Lint集成到VC++6.0和SourceInsight的方法和步骤。 (一)Windows下C/C++开发工具中,VC6使用较为普遍,因此这里先讲下VC6.0环境中集成pclint的步骤. 首先, 当然要下载软件,正版软件要200多$呢,买不起!所以只好网上找免费的拉。从http://www.61ic.com/down/othe/pclint.rar处可以下载到一个8.0版本的pclint. 1.将pclint.rar解压至c:\, 这样lint文件就位与c:\pclint(安装目录)下了。 2.将c:\pclint\lnt 下的3个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt拷贝至c:\pclint下, 再在安装目录下创建std.lnt和options.lnt两个文件,其中std.lnt的内容如下 // contents of std.lnt c:\pclint\co-msc60.lnt c:\pclint\lib-w32.lnt c:\pclint\options.lnt -si4 -sp4 -i"D:\Program Files;D:\Program Files\Microsoft Visual Studio\VC98\Include" //end 其中-i后面的路径名为VC的安装路径和VC Include 文件路径,根据自己的修改便可。 options.lnt 内容可为空,为定制内容,以后需要时再添加。 准备工作做完了,下一步就是要将pclint集成到VC6中去,先配置lint使之能对单个C或C++文件进行检查。 1.打开VC6,tools--->customize-->tools 新建一个名为pclint的项,在下面填入 command: C:\pclint\lint-nt.exe arguments: -u c:\pclint\std.lnt c:\pclint\env-vc6.lnt "$(FilePath)" Use Output Window 打上勾 close 完成。 这个在你VC窗口tools菜单下应该多了一个pclint选项,可以用它来运行lint程序,对你的c/c++代码进行静态检查了。 现在就可以用个小程序测试一下pclint了 //test1.cpp #include class X { int *p; public: X() { p = new int[20]; } void init() { memset( p, 20, 'a' ); } ~X() { delete p; } }; 编译这个文件,看下你的编译器给你多少警告,再运行下lint, 可以自己对比一下。 我的机器上,VC产生0 errors 0 warnings, 而lint程序产生了如下8条警告信息,有些还是很有用处的提示,这里就不一一分析了. test.cpp(12): error 783: (Info -- Line does not end with new-line) test.cpp(7): error 1732: (Info -- new in constructor for class 'X' which has no assignment operator) test.cpp(7): error 1733: (Info -- new in constructor for class 'X' which has no copy constru
正则表达式类 【1】 正则表达式应用——替换指定内容到行尾 【2】 正则表达式应用——数字替换----------------------------Microshaoft@CCF,jiuk2k@CCF 【3】 正则表达式应用——删除每一行行尾的指定字符 【4】 正则表达式应用——替换带有半角括号的多行 【5】 正则表达式应用——删除空行----------------------------江德华 软件技巧类 ------------------------------------------------------ 【6】 软件技巧——键盘记录的注意事项 【7】 软件技巧——关闭文档标签的便捷方法 【8】 软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 【9】 软件技巧——提示找不到语法文件的解决办法 【10】软件技巧——设置editplus支持其它文字,如韩文----------jackywu1978@LJF 【11】软件技巧——FTP 上传的设置----------------------------李应文2.11汉化版 【12】软件技巧——如何禁用备份文件功能? 【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 工具集成类 ------------------------------------------------------ 【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis、C#) 【15】工具集成——让Editplus调试PHP程序----------------------avenger,aukw@CCF 【16】工具集成——打造 PHP 调试环境(二)----------------------老七2.11汉化版 【17】在 WINPE 中集成 EDITPLUS 后续添加 ------------------------------------------------------ 【18】支持带UTF-8标记/不带UTF-8标记的文件 每个步骤都说得很详细了,就没有必要贴图了,体积不要太大才好。 【1】正则表达式应用——替换指定内容到行尾 原始文本如下面两行 abc aaaaa 123 abc 444 希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg” 即上面的文本最终替换为: abc efg 123 abc efg 解决: ① 在替换对话框,查找内容里输入“abc.*” ② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮 其中,符号的含义如下: “.” =匹配任意字符 “*” =匹配0次或更多 注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。 【2】正则表达式应用——数字替换 (Microshaoft@CCF,jiuk2k@CCF) 希望把 asdadas123asdasdas456asdasdasd789asdasd 替换为: asdadas[123]asdasdas[456]asdasdasd[789]asdasd 在替换对话框里面,勾选“正则表达式”复选框; 在查找内容里面输入“[0-9][0-9][0-9]”,不含引号 “替换为:”里面输入“[\0\1\2]”,不含引号 范围为你所操作的范围,然后选择替换即可。 实际上这也是正则表达式的使用特例,“[0-9]”表示匹配0~9之间的任何特例,同样“[a-z]”就表示匹配a~z之间的任何特例 上面重复使用了“[0-9]”,表示连续出现的三个数字 “\0”代表第一个“[0-9]”对应的原型,“\1”代表第二个“[0-9]”对应的原型,依此类推 “[”、“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它\0\1\2其它”,则替换结果为: asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd 功能增强(by jiuk2k@CCF): 如果将查找内容“[0-9][0-9][0-9]”改为“[0-9]*[0-9]”,对应1 或 123 或 12345 或 ... 大家根据需要定制 相关内容还有很多,可以自己参考正则表达式的语法仔细研究一下 【3】正则表达式应用——删除每一行行尾的指定字符 因为这几个字符在行中也是出现的,所以肯定不能用简单的替换实现 比如 12345 1265345 2345 需要删除每行末尾的“345” 这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入“345$” 这里“$”表示从行尾匹配 如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串 a. 选择要操作的行 b. 编辑-格式-删除行注释 c. 在弹出对话框里面输入要清除的行首字符,确定 【4】正则表达式应用——替换带有半角括号的多行 几百个网页中都有下面一段代码: <script LANGUAGE="JavaScript1.1"> <!-- htmlAdWH('93163607', '728', '90'); //--> </SCRIPT> 我想把它们都去掉,可是找了很多search & replace的软件,都是只能对“一行”进行操作。 EditPlus 打开几百个网页文件还是比较顺畅的,所以完全可以胜任这个工作。 具体解决方法,在 Editplus 中使用正则表达式,由于“(”、“)”被用做预设表达式(或者可以称作子表达式)的标志,所以查找 “<script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH('93163607', '728', '90'.);\n//-->\n</SCRIPT>\n” 时会提示查找不到,所以也就无法进行替换了,这时可以把“(”、“)”使用任意字符标记替代,即半角句号:“.”。替换内容为 <script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH.'93163607', '728', '90'.;\n//-->\n</SCRIPT>\n 在替换对话框启用“正则表达式”选项,这时就可以完成替换了 补充:(lucida@DRL) 对( ) 这样的特殊符号,应该用\( \)来表示,这也是很标准的regexp语法,可以写为 <script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH\('93163607', '728', '90'\);\n//-->\n</SCRIPT>\n 【5】正则表达式应用——删除空行 启动EditPlus,打开待处理的文本类型文件。 ①、选择“查找”菜单的“替换”命令,弹出文本替换对话框。选中“正则表达式”复选框,表明我们要在查找、替换中使用正则表达式。然后,选中“替换范围”中的“当前文件”,表明对当前文件操作。 ②、单击“查找内容”组合框右侧的按钮,出现下拉菜单。 ③、下面的操作添加正则表达式,该表达式代表待查找的空行。(技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。 直接在"查找"中输入正则表达式“^[ \t]*\n”,注意\t前有空格符。 (1)选择“从行首开始匹配”,“查找内容”组合框中出现字符“^”,表示待查找字符串必须出现在文本中一行的行首。 (2)选择“字符在范围中”,那么在“^”后会增加一对括号“[]”,当前插入点在括号中。括号在正则表达式中表示,文本中的字符匹配括号中任意一个字符即符合查找条件。 (3)按一下空格键,添加空格符。空格符是空行的一个组成成分。 (4)选择“制表符”,添加代表制表符的“\t”。 (5)移动光标,将当前插入点移到“]”之后,然后选择“匹配 0 次或更多”,该操作会添加星号字符“*”。星号表示,其前面的括号“[]”内的空格符或制表符,在一行中出现0个或多个。 (6)选择“换行符”,插入“\n”,表示回车符。 ④、“替换为”组合框保持空,表示删除查找到的内容。单击“替换”按钮逐个行删除空行,或单击“全部替换”按钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。 【6】软件技巧——键盘记录的注意事项 EditPlus 的键盘记录有些类似于 UltraEdit 的宏操作,不过功能相对单一,录制的文件可编辑性较差。 由于基本无法编辑录制的文件,所以录制的时候为了避免录制失败,推荐纯粹使用键盘操作,以下是比较关键的几个键盘组合: Ctrl+F = 调出查找对话框 Ctrl+H = 调出替换对话框 Alt+F4 = 关闭作用,比如,关闭查找对话框、关闭替换对话框,等等 其它键盘快捷键在“帮助-快捷键列表”里面可以很容易的查找到,这里就不细说了。 【7】软件技巧——关闭文档标签的便捷方法 右键单击文档标签工具条,弹出菜单中选择“标签选项”,选中“用鼠标中间的按钮关闭”,这里包括鼠标的滚轮。 【8】软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 如果你使用 EditPlus 进行文本编辑,那么每次创建文本文件,编辑后保存时,尽管文件类型下拉列表中显示的是文本文件, EditPlus 还是询问你是否添加".txt"后缀,是不是很烦? 解决方法: ① 在程序目录建立一个空的文件“template.txt” ② “工具-参数设置-模板”里面,单击“添加”按钮添加模板,“菜单文本”这里输入“Text”,浏览“template.txt”,之后确定即可 ③ “文件-新建-text”,就可以建立一个空的文本文件,保存时,这个文件自动带有扩展名".txt",也就避免了令人头疼的确认 ④ 模板设置文件名称为“template.ini”,如果和主程序同一路径,可以使用相对路径 罗嗦了点,不过管用 要自动创建带有某种后缀的文件,方法同上。 【9】软件技巧——提示找不到语法文件 *.stx 的解决办法 原因多为设置的语法文件不存在或者是路径设置不对。这是因为 EditPlus 的语法是设置文件采用的是绝对路径,而在你设置了语法文件之后,再把程序复制到其它目录,因而导致 EditPlus 无法找到该语法文件。 解决办法: 在主程序目录里,找到 Setting.ini 这是 EditPlus 存放语法的文件 查找后缀为“.stx”、“acp”的文本内容,或者查找带有驱动器符号的行,比如 Syntax file=C:\Program Files\EditPlus 2\cpp.stx 那么,就把”C:\Program Files\EditPlus 2\“替换成你当前软件的路径。 其它提示找不到文件的解决方法同上 【10】软件技巧——设置editplus支持其它文字,如韩文 在editplus里打开文件,出来打开文件对话框;然后点击“转换器”后面的那个省略号,会出来自定义转换器对话框;在右边选择你需要的编码方式,添加到左边,然后点确定;最后在下拉框中选择需要的编码方式,然后打开文件即可。 【11】软件技巧——FTP 上传的设置 “文件->远程操作->FTP 上传”在“设置”选项卡中设置好参数(“子目录”前面应该加“/”如“/web/”),点击“确定”回到“FTP 上传”选项卡,然后点击“上传”即可;“批量上传”的设置类似。 【12】软件技巧——如何禁用备份文件功能? 在“参数选择”的文件选项页,禁用“'保存时自动创建备份文件”选项 【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 要添加 *.STX(语法文件)或 *.ACP(自动完成文件): 1. 选择“参数选择→语法” 2. 单击“添加”按钮,命名,在“扩展名”部分输入对应扩展名(不带“.”) 3. 浏览/输入 STX(语法文件部分) 以及 ACP(自动完成文件部分)。 添加剪辑库文件(*.CTL) 复制相应 *.CTL 文件到软件安装目录,重新启动 EditPlus ,则系统自动识别。 作者主页有很多语法自动完成文件下载,地址 http://editplus.com/files.html 【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis) 在“工具→参数选择→用户工具”选项页设置,设置步骤 ① 设置组名称,这里也可以不设置 ② 单击“添加工具→应用程序”按钮并进行如下设置 ③ 各种类似"$(FilePath)"的参数可以在文本框右侧的箭头下拉菜单中获取,具体含义如下 参数 描述 $(FilePath) 文件路径文件全名,含目录文件名) $(FileDir) 文件目录(不带文件名) $(FileName) 文件名(不带目录) $(FileNameNoExt) 不带扩展名的文件名(不带目录) $(FileExt) 扩展名(当前文件) $(ProjectName) 工程名称(当前工程名) $(CurLine) 当前行号(光标位置处的行号) $(CurCol) 当前列号(光标位置处的列号) $(CurSel) 当前文本(插入当前选定文本) $(CurWord) 当前单词(插入当前单词) $(WindowList) 显示当前窗口列表并选择特定文件 例子 1. Java 编译器 菜单文本:Java 编译器 命令:c:\java\bin\javac.exe 参数:"$(FilePath)" 初始目录:$(FileDir) 捕获输出:开启 要运行已编译的 Java 类文件,你可以进行如下设置: 菜单文本:Java 命令:c:\java\bin\java.exe 参数:$(FileNameNoExt) 初始目录:$(FileDir) “命令”部分应当替换为实际的 Java 解释器的路径。 例子 2. Borland C++ 菜单文本:Borland C 命令:c:\bc\bin\bcc32.exe 参数:-Ic:\bc\include -Lc:\bc\lib -n$(FileDir) $(FilePath) 初始目录:c:\bc\bin 捕获输出:开启 例子 3. Visual C++ 菜单文本:Visual C++ 命令:c:\msdev\vc98\bin\cl.exe 参数:"$(FilePath)" 初始目录:$(FileDir) 捕获输出:开启 例子 4. Inno Setup 菜单文本:编译 Inno 命令:C:\Program Files\Inno Setup 4\Compil32.exe” 参数:/cc $(FileName) 初始目录:$(FileDir) 捕获输出:开启 例子 5. nsis 菜单文本:编译 nsis 命令:C:\NSIS\makensis.exe 参数:$(FileName) 初始目录:$(FileDir) 捕获输出:开启 例子 6. C# 菜单文本:编译 C# 命令:C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\csc.exe 参数:$(FileName) 初始目录:$(FileDir) 捕获输出:开启 在上面设置中,在命令部分,必须使用系统中各自编译器的绝对路径。 设置完毕后,你可以在“工具”菜单运行对应工具了,运行结果会显示在底部的输出窗口,你也可以通过快捷键(Ctrl + 0-9) 运行,或者是通过“用户工具栏”的快捷按钮运行。 要运行已编译的 *.exe 文件,你可以进行如下设置(此时可执行文件需要和编译文件同名): 菜单文本:Run 命令:$(FileNameNoExt) 参数: 初始目录:$(FileDir) 【15】工具集成—— 让Editplus调试PHP程序 1:打开Editplus,选择"工具->配置用户工具..."菜单。 2:在弹出的窗口中选择"添加工具->应用程序",给新程序起一个好记的名字,比如这里我们用"Debug PHP",在"菜单文本"中输入"Debug PHP"。点击"命令行"右边的按钮,找到你的php.exe所在的路径,例如这里是"c:\php\php.exe"。再点击"参数"右边的下拉按钮选择"文件路径",最后再把"捕获输出"前面的复选框选上。 3:现在测试一下,新建一个php文件,按快捷键Ctrl+1可以激活刚才我们设置的工具(如果你设置了多个工具,快捷键可能会有所不同),现在你可以看到它已经能正常工作了。但是还有一点不太理想:如果你的PHP程序出错,在输出窗口会提示你第几行出错 ,单击这一行提示,Editplus老是提示你找不到某某文件,是否新建。接下下我们要修正这个功能。 4:打开刚才用户工具设置窗口,找到刚才设置的"Debug PHP"工具。点击"捕获输出"复选框旁边的"输出模式"按钮,会弹出一个定义输出模式的窗体,把"使用默认输出模式"前面的复选框去掉, 在"正则表达式"这一项的文本框中输入" ^.+ in (.+) line ([0-9]+) "(不包括引号),细心的朋友可能会发现,这里使用的也正则表达式的语法。然后,在下面的"文件名"下拉菜单中选择"预设表达式 1",即上边正则表达式中的第一个参数,"行"下拉菜单项选择"预设表达式 2","列"下拉项保持为空。然后保存设置。 5:好了,现在再来试一下吧,双击出错的行数,Editplus就会自动激活出错文件,并把光标定位到出错行,是不是特别方便呢?! 现在,Editplus经过我们的"改造",已经可以即时的调试PHP文件了,虽然还不是"可视化"界面的,但对于一些平常的小程序来查错还是非常好用的。Editplus真是不款不可多得的好工具,如果你有什么使用技巧,不要忘了大家一起分享哦。^O^ 如果不能切换错误行号,请尝试作如下修改: (by aukw@CCF) 1.php.ini 中html_errors = Off打开 //如果你不打开,3.中的表达式要修改 2.参数改成:-q -f "$(FilePath)" //不加"符号的话文件名有空格的文件调试失败。。 //-q不输出html头信息,你去掉也行,不过调试时候你一般用不到那些header信息 3." ^.+ in (.+) line ([0-9]+) " 改成 "^.+ in (.+) on line ([0-9]+)$" //如果还是不行,请注意调试结果,自己修改表达式来取出文件名和行号 【16】工具集成——打造 PHP 调试环境(二) 1: 把剪辑库定位在 PHP4 Functions 上就可以在编辑时, 利用[插入]->[匹配剪辑]命令,就可以自动完成末输入完整的 PHP 函数(或直接按 F2 键) 2: 类似上面,在选择部分文字后,同样可以自动完成。(同 F2) 3: 在[参数选择]->[设置和语法]->PHP->自动完成, 选择目录下的 php.acp 文件,你可以定制自己的自动完成方式. 4: 想要即时预览文件,可在[参数选择]->[工具]->WEB 服务器中添加本地目录,(注意不要加 http:// , 应是一个有效的站点)。     如: 主机->localhost/php | 根目录->D:\php 主机->localhost/asp | 根目录->D:\asp 主机->localhost/cgi | 根目录->D:\cgi 完成设置后只要脚本文件位于这些目录下(子目录也没问题), 就能够正确解释. 5: 各种语法和模板文件可以在 http://editplus.com/files.html 获得,可根据需要选用和编辑。 6: Ctrl+F11 可显示当前文件中的函数列表. 7: 添加各种用户工具.如: 启动MYSQL服务器管理工具->C:\mysql\bin\winmysqladmin.exe 启动Apache服务器->C:\Apache\bin\Apache.exe -k start 启动Apache服务器->C:\Apache\bin\Apache.exe -k stop (shutdown) 8: DBG 附带有一个 prof_results.php 文件,可剖析 PHP 程序的性能. 虽不是真正的调试器,但已经够了. OK! 经过改造后,是不是有点象一个 IDE 什么?还差点,没有即时帮助...看我的,再来: 9: 把 php_manual_en.chm (最好是扩展帮助手册)加入到用户工具中, 当遇到需要参考的关键字时, 把光标定位其上, 按下快捷键 Ctrl+1, 看到了吗. 在输入时有想不起来的函数名时, 先按照第 1 条的方法调出函数, 然后...怎么样? 以上有的是对于调试工具的设置,由于此类工具比较多,大家设置时参考以上的基本就差不多了,所以就不过多的列举了。 【17】在 WINPE 中集成 EDITPLUS 可以基于目前的bartpe做得WINPE中,菜单使用nu2menu制作 默认位置为 \programs\editplus\ 默认系统位置为光盘的 i386 目录 i386/system32 的 autorun.bat 中添加外壳集成(系统右键) regedit /s %SystemDrive%\programs\editplus\REG.REG regsvr32 /s \programs\editplus\EPPSHELL.DLL (reg.reg保存了epp的工具栏信息,当然注册用户也可以放置注册信息) 复制editplus安装包里面的文件到programs\editplus\,注意,如果有setting.ini,删掉该文件,在nu2menu里面加入以下句子(可以根据需要安排位于特定菜单条目下) <MITEM TYPE="ITEM" DISABLED="@Not(@FileExists(@GetProgramDrive()\Programs\EditPlus\editplus.exe))" CMD="RUN" FUNC="@GetProgramDrive()\Programs\EditPlus\editplus.exe">EditPlus 文本编辑</MITEM> 【18】支持带UTF-8标记/不带UTF-8标记的文件 Lei@DRL提出并测试 这里Byte Order Mark翻译为标记/文件头/标签 参数选择-文件-里面设置“支持不带有UTF-8文件头的UTF-8文件”,我这里翻译标签为UTF-8文件头,如果复选该项,应该是保存为不带标签的Utf-8,如果不复选,应该是保存成带有BOM的UTF-8。 这样就可以打开带签名的UTF-8文件,并且可以正常编辑,但是又不能打开不带签名的了,想要打开不带签名的还需要改回来...不过虽然有点麻烦,但是总算能用了
Visual C++ 6.0的集成开发环境对项目文件的管理功能比前几个版本有了很大的增强,但是对打开文档窗口的管理和普通的MDI编辑软件一样,只能通过窗口菜单切换,使用起来很不方便。2001年的时候我在网上见到了一款名为“WndTab”的VC插件,它提供了一个集成在编辑窗口的table标签栏,每个打开的文档对应一个标签栏的按钮,通过鼠标点击按钮可以在文件之间快速切换,大大方便了代码查看和编辑,除此之外,这个插件还提供了C++程序文件和头文件互相切换功能(注:2003年的时候“Wndtab”插件还在开发,功能更多,还支持二次插件开发,但同时不稳定的毛病加重了,且占用资源太多,内存太少使用起来很困难)。这个插件一下子就征服了我(sorry,那个时候我不知道VA),通过对“WndTab”的使用,我也发现了很多问题,比如,文件切换只能在同一个目录中进行,当程序文件和头文件分别放在不同的目录中时就不能切换。还有一个很大的问题就是“WndTab”提供了很多并不实用(仅仅是本人的看法,如有雷同,实属荣幸)而且繁琐、容易出错的功能,比如对标签栏的重组和编号功能,这个功能在频繁地打开和关闭文件时经常令VC的IDE崩溃。好在 “WndTab”的作者公开了源代码,于是我就开始研究“WndTab”的代码,于是便有了借鉴“WndTab”的成功经验,开发一个功能更实用且简单、稳定的插件的想法,于是“TabBars”便在2002年诞生了。 “TabBars”插件借鉴了“WndTab”插件的框架,大刀阔斧地去掉了标签栏重组和编号功能,简化了table标签栏的界面布局,使用Button 风格的自画table控件,重新设计了工具栏图标,界面更加美观。持此之外,TabBars还添加了很多实用的功能,比如自动保存文件,C++程序文件和头文件互相切换支持多目录搜索功能,注释选定的代码块,从注释的代码块中恢复代码,为函数添加格式化函数声明,注释代码时自动添加操作者信息,自动保存编译过程,自动保存文件等等,所有的功能都支持快捷键。“TabBars”坚持开源品质,2002年发布的同时也发布了源代码,当时在网上引起了很大的反响,很多朋友提出了宝贵意见,修改bug,于是便有了很多个版本,我一直根据朋友的意见修改并维护着一个自己的版本,并通过http://www.winmsg.com/cn/orbit.htm发布,随后由于工作的原因有一段时间不能接触网络,新版本“TabBars”的发布也受到了影响,但是对“TabBars”的改进一直没有停止。2003 年,我和Codeproject上的.dan.g.联系,征得他的同意后将“项目代码自动打包”和“OpenZip”两个功能添加到了 “TabBars”(注:请参考codeproject上的文章:Zip-up the source code for your latest CodeProject article),我同时对这两个功能进行了修改,原来的“项目代码自动打包”功能只能将dsp目录中的文件打包,但是考虑到很多软件项目的代码文件和头文件都是分布在不同的目录中,只打包当前目录有些不妥,于是添加了指定整个目录打包的选项。2004年,我又将.dan.g.的“在代码中添加 Visio-like diagrams的功能”集成到“TabBars”中(注:请参考codeproject上的文章:Add and edit diagrams in your code with this 'Visio-like')。这两次修改的版本都没有正式发布,只在朋友们中间小范围测试使用,并不断修改。2005年4月,“TabBars”的测试工作完成,正式定版发布,版本号为:1.0.17.3169,2005年6月,代码整理完成,同时发布源代码。 本文主要介绍TabBars插件的功能和使用方法,关于如何编译、调试“TabBars”源代码和代码解读的问题,请参阅“http://blog.csdn.net/orbit/”上的“TabBars”系列文章。 说了这么多,你一定想知道“TabBars”到底什么样子?有什么功能?如何使用?下面就介绍“TabBars”的功能和使用方法。图(1) 就是“TabBars”集成到VC编辑环境后的界面,上面是一个工具条,下面是用于文件快速切换的table标签栏: 图1. 集成到VC编辑环境的“TabBars” 一 使用table标签窗口快速切换文件 在一个大的项目中浏览不同文件中的代码是一件痛苦的事情,VC所能够提供的帮助就是工作区中的“Files”窗口和菜单栏的“窗口”菜单,当项目中的文件很多时使用起来非常不方便。如果能够象属性页窗口那样通过一个Table控件在不同的窗口之间快速切换,就能够大大的提高工作效率。“TabBars”插件就实现了这个功能,“TabBars”插件采用子类化(subclass)技术,通过Hooker过滤工作区窗口的消息维护了一个table标签栏,在新文档窗口创建的时候在table标签栏上创建对应的标签按钮,文档关闭时删除标签按钮。这样开发人员只需要在标签栏的按钮上点击鼠标就可以快速切换到这个文件。在标签栏按钮上点击鼠标右键会弹出属性菜单: 图2. 标签栏属性菜单 通过菜单的关闭窗口功能可以有选择的关闭窗口,通过系统菜单可以访问Windows的文件系统菜单,关于Windows文件系统菜单将在后面介绍。 用户可以在配置窗口设置标签栏的显示属性: 图3. TabBars 选项 在“TabBars 选项”窗口可以设置标签栏的位置,可以在编辑窗口的上面,也可以设置在编辑窗口的下面,满足不同习惯用户的要求。还可以选择是否在标签栏显示图标,是否支持系统菜单以及新打开窗口的位置,对于系统资源比较有限的用户还可以选择打开窗口的最大限制。 二 C++程序文件和头文件快速切换 对于一个管理良好的软件项目,函数的声明和实现通常是分开放在一对对应的程序文件和头文件中,C++更是推崇这种做法,于是在程序文件和对应的头文件之间切换,查看函数的定义和实现就成了一个频繁的操作,“TabBars”插件的C++程序文件和头文件快速切换功能就是为了方便C/C++程序员而设计的。很多插件都有这个功能,但是“TabBars”有自己的特色,那就是支持多目录搜索,使用户在浏览其它库的代码时也能够得心应手。 要切换到当前打开文件对应的程序文件或头文件,只需点击工具栏的图标就可以切换到对应的文件,如果文件没有打开“TabBars”会自动打开文件。通过插件配置窗口可以设置切换文件的搜索路径文件匹配扩展名: 图4. 文件切换选项 “TabBars”最多支持64个搜索目录,根据软件项目的不同可以选择使用其中的部分搜索目录,“TabBars”只从目录前面有X选择标记的目录中搜索对应的文件。用户还可以指定文件搜索时对扩展名的匹配,图(4)中的配置适用于C/C++文件的切换。“TabBars”首先用指定的匹配扩展名在文件所在的目录搜索对应的程序文件或头文件,如果没有找到对应的文件就会依次搜索用户选择的搜索目录。 该功能的默认快捷键是:Ctrl+Shift+S 三 将当前打开的文件所在目录设为工作目录 有时候开发人员需要频繁地打开位于某个目录中的文件,比如浏览某个软件包代码的时候,可是VC集成环境的“当前目录”却在project文件所在的目录,每次打开文件文件选择对话框都会自动定位到project文件所在的目录,还要手工换到软件包所在目录,非常不方便。“TabBars”提供的这个功能可以把当前打开的文件所在的目录设为“当前目录”,这样再打开这个目录中的文件时VC的文件选择对话框会自动定位到这个目录,省去很多麻烦。单击工具栏的按钮就可以轻松的改变集成环境的“当前目录”。 四 以文本方式打开资源文件 VC的class wizard在管理资源的时候经常会出错,有时候两个控件被设置为相同的ID,这会导致程序运行过程中存在潜在的错误,另外,有时候开发人员希望几个控件拥有连续的的ID(通常用在一组相同类型的控件消息处理),这就需要手工编辑资源文件。“TabBars”给开发人员提供了不离开集成开发环境就能够以文本方式编辑资源文件的功能。这个功能的使用很简单,首先打开某个资源,资源编辑窗口就成为当前窗口,此时单击工具栏的按钮就可以以文本的方式打开资源文件。 五 为选定的代码添加C风格的注释 这个功能就不多说了,就是使用一对/**/ 将选择的代码编程C风格的注释,如果用户还设置了“自动添加注释信息”,则会在开始位置添加注释信息。使用方法是首先在编辑窗口选择一块代码,然后单击工具栏的按钮,代码注释的效果如下图所示: 图5. C风格代码注释效果 该功能的默认快捷键是:Ctrl+Shift+B 六 为选定的代码添加C++风格的注释 嵌套的/**/注释是不允许的,当选择的代码块中已经有/**/注释的代码块时,使用C++风格的注释就是唯一的选择了。使用的方法是首先在编辑窗口选择一块代码,然后单击工具栏的按钮,代码注释的效果如下图所示: 图6. C++风格代码注释效果 该功能的默认快捷键是:Ctrl+Shift+R 七 从注释代码中恢复代码 这个功能也不用多说了,使用方法是首先在编辑窗口选择一块注释代码,对于C风格的代码块要选择完整的/**/对,然后单击工具栏的按钮。 该功能的默认快捷键是:Ctrl+Shift+U 八 添加格式化函数说明 这个功能就是在函数前面添加具有一定格式的说明,使用方法是首先选择完整的函数声明,下图所示的就是两种正确的选择: 图7. 选择完整的函数声明 然后单击工具栏的按钮,在弹出的对话框中输入对函数的说明和参数解释: 图8. 输入函数说明 下图是生成的说明块的效果: 图9. 格式化函数说明的效果 该功能的默认快捷键是:Ctrl+Shift+F 九 添加Visio-like diagrams 在你的代码中添加几个简单的模块关系图是不是很酷?感谢Codeproject上的.dan.g.为我们完成了这个工作。这个功能的使用很简单,首先在编辑窗口内将编辑光标定位到需要插入图表的位置,然后单击工具栏的按钮,就会弹出diagrams编辑窗口: 图10. diagrams编辑窗口 下图是生成的代码: 图11. 生成的ASCII图表 如果要修改ASCII图表,只需选择完整的ASCII图表代码块,然后单击工具栏的按钮。 十 VC工程代码自动打包 直接在集成开发环境中将整个项目的源代码打包压缩成zip文件是一个很实用的功能,“TabBars”对此功能进入了深度开发,使其功能更为完善。当你要打包一个项目的代码时,单击工具栏的按钮就可以了。“TabBars”插件会自动搜索整个工作区的所有项目,然后定位到工作区的根目录,用户也可以根据代码组织的实际情况选择需要打包的代码所在目录,整个界面如图(12)所示: 图12. 打包整个工作区 选择压缩文件输出位置,单击“确定”按钮就可以了。由于代码所在目录通常还有VC编译生成的临时文件,用户还可以选择打包过程中排除这些文件,在“打包压缩设置”窗口中可以设置文件选择方式: 图13. 打包压缩选项设置窗口 如果选择了“压缩完成后打开文件确认”选项,“TabBars”会在打包完成后自动调用zip文件的关联软件打开生成的压缩包,以确认是否正确生成了压缩文件。 十一 从zip压缩文件中打开VC工程 通常从网上下载的例子代码都是压缩在zip文件中的,查看zip文件中的项目通常要将代码解压缩到临时目录中然后用VC打开项目,“TabBars”提供了不离开VC的集成开发环境就能够查看zip压缩文件中的VC项目的功能。单击工具栏的按钮,在弹出的文件选择窗口中选择VC项目所在的zip压缩文件,“TabBars”会自动在指定的临时目录中展开压缩文件,然后定位到工作区文件并打开。如果一个zip文件中没有工作区(dsw)文件,“TabBars”会弹出窗口让用户选择具体的项目文件(dsp)。如果zip文件中有多个工作区文件,“TabBars”会弹出如下窗口让用户选择一个工作区: 图14. 选择工作区 用户可以通过图(13)所示的“打包压缩选项设置窗口”设置临时文件存放目录,默认的临时文件存放位置是:C:\unzipped 十二 自动保存文件 “TabBars”提供定时自动保存文件功能。在图(15)所示的设置窗口中可以选择启用或关闭自动保存功能。 图15. 一般设置窗口 十三 自动添加注释信息 “TabBars”提供在注释代码时梓潼添加注释信息的功能,目前的版本支持添加注释人名称和时间戳。可以在图(15)所示的设置窗口中选择自动添加的注释信息。 十四 自动生成工程编译日志 “TabBars”提供生成编译日志的功能,会在dsp文件所在目录生成一个同名的log文件,内部记载项目的编译次数和每次编译的情况,记录编译次数可以为你的软件定版本提供依据。以下时日志文件的部分内容示例: /本日志文件由 "Tabbar Add-in(1.17.3169) For Visual C++ 6.0" 创建 //项目文件:C:\unzipped\CustDlg\CustDlg.dsp //如果文件增长的很大请删除除本节之外的其他信息 [MAIN] nBuildNumber = 49 [Build00000001] sStartTime = 2005-08-18 16:17:53 sCompileUser = orbit nErrors = 0 nWarns = 0 sEndTime = 2005-08-18 16:17:57 [Build00000002] sStartTime = 2005-08-18 16:19:32 sCompileUser = orbit nErrors = 0 nWarns = 0 sEndTime = 2005-08-18 16:19:33 可以在图(15)所示的设置窗口中选择是否记录日志以及日志记录的内容。 十五 在table标签栏使用Windows系统菜单 在table标签栏单击鼠标右键会弹出文件属性菜单,如果你在“TabBars选项”窗口中选择“在右键菜单使用系统菜单”选项,则还可以使用Windows的系统菜单,不离开VC的集成开发环境就可以进行常规的文件操作: 图16. 系统菜单示例
首先,在安装vs2022之后,需要安装Qt5.14.2并配置编译环境。在安装Qt5.14.2时,需要确保选择与vs2022兼容的版本,并选择安装Qt的MSVC版本。 安装完成后,打开vs2022。在新建项目时,选择Qt项目类型并填写项目名称。然后在项目属性中配置Qt,选择Qt版本并添加Qt安装路径。接下来在C/C++ -> 常规中添加Qt的include路径,如:C:\Qt\5.14.2\msvc2019_64\include。在链接器 -> 常规中添加库文件路径,如:C:\Qt\5.14.2\msvc2019_64\lib。 在Qt的配置文件(.pro)中,添加需要的模块,如:QT += core gui widgets。然后在vs2022编译运行项目,确保能够成功构建和执行。 要在Windows上安装Qt5.14.2和vs2017并成功配置,首先需要下载并安装Qt5.14.2的Windows安装程序。在安装过程中,选择与vs2017兼容的Qt版本,并选择安装Qt的MSVC版本。 安装完成后,打开vs2017。在新建项目时,选择Qt项目类型并填写项目名称。然后在项目属性中配置Qt,选择Qt版本并添加Qt安装路径。接下来在C/C++ -> 常规中添加Qt的include路径,如:C:\Qt\5.14.2\msvc2017\include。在链接器 -> 常规中添加库文件路径,如:C:\Qt\5.14.2\msvc2017\lib。 在Qt的配置文件(.pro)中,添加需要的模块,如:QT += core gui widgets。然后在vs2017中编译运行项目,确保能够成功构建和执行。 在安装和配置过程中,需要留意Qt和vs的版本兼容性,并确保路径配置信息填写正确。希望以上指南对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值