自动化更新Windows Template Library (WTL) 教程

Windows Template Library (WTL) 是一组类似于MFC的类库,它使得图形用户界面(GUI)的开发变得更加容易,同时避免了"真正的MFC"带来的额外开销。然而,默认安装并不支持在Visual Studio中立即使用WTL,编译器无法找到包含WTL头文件的#include指令,即使WTL已经安装。

为了解决这个问题,编写了一个Perl脚本来自动化更新WTL,使其在Visual Studio中可用。用户不需要提供任何输入,所有的参数都将被忽略。将"更新"定义为一个过程,它使得WTL对Visual Studio中的项目可用(即#include指令能够成功地定位到WTL文件)。

首先,假设已经安装了Microsoft Platform SDK,并且至少选择了以下选项:

  • 选择了"配置选项/与MS Visual C++集成"
  • 选择了"配置选项/注册环境变量"
  • 选择了"源代码/Windows Template Library"

Microsoft提供的Readme.txt文件指出,只需将WTL源目录中的头文件复制到编译器查找#include指令时搜索的包含目录之一即可。MS SDK安装程序将路径%MSSDK%/Include/Atl30注册为第一个包含目录。因此,脚本首先查找"MSSDK"环境变量的值(SDK安装路径)。然后,将%MSSDK%/Include/Atl30(目标)中的文件与%MSSDK%/Src/WTL/Include(源)中的文件进行更新。

更新过程会评估目标文件(如果有的话)和源文件之间的时间戳差异。每次比较可能有以下结果之一:

  • 没有目标文件:将源文件复制到目标
  • 目标文件和源文件具有相同的时间戳:不更新目标
  • 目标比源新:发出警告,不更新目标
  • 目标比源旧:用更新的源文件覆盖目标

也可以使用这个脚本来更新MSSDK的后续版本。在安装了新的Platform SDK之后,脚本将确保%MSSDK%/Include/Atl30包含当前版本的WTL源文件(所有旧文件将自动替换为新(已安装)版本)。

另一种更新WTL的方法是更新Visual Studio扫描的目录列表,当它查找#include文件时。这个脚本试图遵循WTL的readme.txt中的建议。

待办事项

更新不仅仅是源代码,还包括应用程序向导文件。这意味着将awx文件从WTL安装目录复制到Visual Studio向导目录。唯一的问题是如何定位Visual Studio的安装路径...

代码示例

以下是Perl脚本的一个简单示例,用于更新WTL:

#!/usr/bin/perl use strict; use warnings; # 定义MSSDK环境变量的路径 my $mssdk_path = $ENV{'MSSDK'}; # 定义源目录和目标目录 my $source_dir = "$mssdk_path/Src/WTL/Include"; my $target_dir = "$mssdk_path/Include/Atl30"; # 更新WTL文件 sub update_wtl { my ($source, $target) = @_; # 检查源文件和目标文件的时间戳 if (-e $target) { my $source_time = (stat($source))[9]; my $target_time = (stat($target))[9]; if ($source_time > $target_time) { print "更新文件: $target\n"; copy($source, $target) or die "无法复制文件: $!"; } elsif ($source_time < $target_time) { print "警告: 目标文件比源文件新,不更新: $target\n"; } else { print "目标文件和源文件时间戳相同,不更新: $target\n"; } } else { print "目标文件不存在,复制源文件: $target\n"; copy($source, $target) or die "无法复制文件: $!"; } } # 遍历源目录中的所有文件,并更新目标目录中的文件 opendir(my $dh, $source_dir) or die "无法打开目录: $!"; while (my $file = readdir($dh)) { next if $file =~ /^\.\.?$/; # 忽略.和..目录 my $source_file = "$source_dir/$file"; my $target_file = "$target_dir/$file"; update_wtl($source_file, $target_file); } closedir($dh);
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485