ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

WTL 10.0在VS2019中的完整配置与开发实践指南

WTL 10.0在VS2019中的完整配置与开发实践指南 简介本资源为Windows Template LibraryWTL10.0最终正式版专为使用Visual Studio 2019开发轻量级、高性能原生Windows桌面应用的C开发者设计有效解决传统MFC臃肿、ATL窗口支持薄弱、现代IDE兼容性差等痛点。压缩包共296个文件含104个核心头文件.h、39个示例源码.cpp、22个VS2019解决方案.sln及配套项目文件.vcxproj/.filters另有资源文件.rc/.ico/.bmp/.png与HTML帮助文档完整覆盖安装、编译、调试与UI资源集成全流程整体仅704KB精简高效。目前已有322人学习下载。用户可直接部署至VS2019环境获得开箱即用的Unicode支持、模板化窗口/控件类、标准消息映射机制及与调试器深度集成的开发体验并通过附带的多场景示例如工具栏、标签页、打印预览等UI组件实现快速掌握WTL工程化实践要点。1. 项目概述WTL 10.0与Visual Studio 2019的最终适配如果你是一位长期使用微软技术栈特别是从事Windows桌面客户端开发的C程序员那么对WTLWindows Template Library这个名字一定不会陌生。它不像MFC那样庞大而古老也不像后来的WPF、WinUI那样依赖复杂的运行时WTL以其轻量、高效和对原生Win32 API的完美封装成为了许多追求性能和代码简洁度开发者的心头好。然而随着Visual Studio版本的快速迭代尤其是从VS2017开始引入的新式MSBuild项目系统和C标准支持老版本的WTL在集成和使用上开始遇到各种“水土不服”的问题。标题中的“WTL10.0 最终版本 支持vs2019”指的就是WTL库发展到10.0这个版本后官方或社区为其提供的、能够完美兼容Visual Studio 2019开发环境的最终适配方案。这不仅仅是一个库的版本更新更是一个经典工具链在现代开发环境中重新焕发生机的关键补丁。对于开发者而言这个适配意味着你可以继续在VS2019乃至更高版本通常也兼容VS2022中使用你熟悉的WTL类库来构建高性能的Windows桌面应用而无需被迫降级编译器或忍受项目配置的各种警告和错误。它解决了从项目创建、代码智能感知IntelliSense、到编译链接、调试部署这一整套流程中的兼容性问题。无论是维护历史遗留的WTL项目还是启动一个全新的、对执行效率和二进制体积有严苛要求的客户端项目这个“最终版本”的适配都是不可或缺的基石。接下来我将从一个多年C/Windows开发者的角度为你彻底拆解如何获取、配置并高效使用这个支持VS2019的WTL 10.0分享其中每一步的细节、原理以及我踩过的坑。2. 环境准备与WTL 10.0源码获取2.1 Visual Studio 2019的安装与组件选择工欲善其事必先利其器。在开始WTL之旅前确保你的VS2019安装正确且包含了必要的组件。很多新手容易在这里出问题导致后续编译失败。首先关于VS2019的安装源。网络上的“离线安装包”通常是为了解决网络环境不稳定或需要批量部署的问题。如果你从微软官网下载在线安装器在安装时选择“下载全部后再安装”也会在本地生成一个完整的离线包。对于个人开发者直接使用在线安装器通常是最方便的。安装时在“工作负载”选项卡中必须勾选“使用C的桌面开发”。这不仅仅是安装编译器MSVC还会包含Windows SDK、C标准库、MFC/ATL等关键组件。WTL本身不依赖MFC但它的生态和部分工具可能与ATLActive Template Library相关而ATL是包含在这个工作负载中的。其次在右侧的“安装详细信息”中我建议确保以下组件被选中MSVC v142 - VS 2019 C x64/x86 生成工具这是核心编译器。Windows 10 SDK或Windows 11 SDK选择一个较新的版本如10.0.19041.0或更高它提供了最新的Windows头文件和库。WTL是对Win32 API的封装因此SDK是必需的。C ATL 用于 v142 生成工具虽然WTL可以独立于ATL使用但安装ATL组件能确保环境完整避免一些潜在的链接或工具依赖问题。注意避免安装多个不同版本的Windows SDK这可能会导致项目属性中SDK版本设置混乱。如果已经安装了多个可以在创建项目后在项目属性 - 常规 - Windows SDK版本中明确指定一个。安装完成后建议运行一次Visual Studio Installer点击“修改”检查上述组件是否已安装。有时候在线安装可能会因为网络问题遗漏某些组件。2.2 获取支持VS2019的WTL 10.0源码WTL的官方发布并不在微软的GitHub主仓库而是由一个开源社区在SourceForge和GitHub上维护。标题中“最终版本”通常指的是社区维护的、解决了VS2019兼容性问题的WTL 10.0版本。推荐获取途径访问WTL在GitHub上的社区仓库例如https://github.com/microsoft/wtl但请注意微软的仓库可能不是最新社区版更活跃的可能是其他fork。或者直接搜索“WTL 10.0 Visual Studio 2019”找到可靠的下载源。一个常见的来源是SourceForge上的WTL项目页面那里通常有打包好的最新版本。版本辨别你需要下载的是WTL10_xxxx这样的压缩包xxxx是子版本号如WTL10_9161。解压后关键的目录结构如下WTL10\ ├── AppWiz\ # 项目向导文件用于在VS中创建WTL项目 ├── Include\ # 核心头文件目录所有WTL类模板都在这里 ├── Samples\ # 示例程序 └── Docs\ # 文档核心就是Include目录。WTL是一个只有头文件Header-Only的库这意味着你不需要编译任何.lib或.dll文件只需要在项目中正确设置头文件包含路径即可使用。AppWiz目录则是让我们能在VS2019的“新建项目”对话框中看到“WTL项目”选项的关键。存放路径建议将解压后的WTL10文件夹放置在一个没有中文和空格、且路径较短的目录下例如D:\Libraries\WTL10\。这样便于在VS中设置全局或项目级的包含路径避免因路径问题导致的编译错误。3. 集成WTL 10.0到Visual Studio 2019获取源码只是第一步将其无缝集成到VS2019的开发环境中才能实现高效开发。集成主要分为两部分安装项目向导和配置包含路径。3.1 安装WTL项目向导AppWizardWTL项目向导能极大简化创建新WTL应用程序、对话框工程或控件的过程。VS2019的向导安装方式与旧版本VS略有不同。定位VS2019模板目录首先找到你机器上VS2019的项目模板目录。通常路径是%USERPROFILE%\Documents\Visual Studio 2019\Templates\ProjectTemplates\Visual C Project你可以在文件管理器的地址栏直接输入这个路径跳转。如果ProjectTemplates或Visual C Project文件夹不存在就手动创建它们。复制向导文件将之前解压的WTL10\AppWiz\文件夹下的所有.vsz和.vsdir文件以及Templates文件夹里面包含各种项目类型的模板文件整体复制到上一步找到的Visual C Project目录下。修改.vsz文件关键步骤用记事本或任何文本编辑器打开你刚复制过来的.vsz文件例如WTLApp.vsz。你会看到类似以下内容VSWIZARD 7.0 WizardVsWizard.VsWizardEngine ParamWIZARD_NAME MyWTLWizard ParamABSOLUTE_PATH D:\OldPath\WTL10\AppWiz\Templates ParamFALLBACK_LCID 1033你需要将ABSOLUTE_PATH参数的值修改为你当前WTL10\AppWiz\Templates文件夹的实际绝对路径。例如ParamABSOLUTE_PATH D:\Libraries\WTL10\AppWiz\Templates。每一个.vsz文件都需要单独修改。这是确保向导能找到模板文件的核心操作很多安装失败都是因为路径没改对。验证安装完成以上步骤后重启Visual Studio 2019。点击“文件”-“新建”-“项目”在弹出的对话框中在左侧语言列表选择“C”你应该能在中间的项目类型列表中看到“WTL”或“WTL Project”分类下面有“WTL AppWizard”等项目模板。如果能看到说明向导安装成功。3.2 配置全局包含路径为了让所有新建的WTL项目都能自动找到WTL头文件最好配置一个全局的包含目录。注意WTL只有头文件所以只需要配置“包含目录”不需要配置“库目录”。打开VS2019创建一个空的“控制台应用”或“Windows桌面应用程序”项目用于测试稍后可以删除。点击菜单栏的“扩展”-“管理扩展”搜索“Property Manager”并安装如果尚未安装。属性管理器是管理多项目配置的利器。打开“视图”-“其他窗口”-“属性管理器”。在属性管理器中你会看到你的解决方案和项目配置如Debug|x64, Release|Win32等。右键点击其中一个配置例如Debug|x64选择“添加新项目属性表”。可以命名为WTL_Global.props并保存到一个公共位置如D:\Libraries。双击这个新创建的属性表打开属性页。导航到“通用属性”-“VC 目录”。编辑“包含目录”添加你的WTL头文件路径即D:\Libraries\WTL10\Include请替换为你的实际路径。可以点击下拉箭头-“编辑”然后添加新行。重要在属性管理器中将这个WTL_Global.props属性表拖拽到“属性管理器”窗口顶层的“解决方案”节点下。这样该解决方案中的所有项目都会自动继承这个包含路径设置。你也可以将这份属性表保存好以后新建任何解决方案时都可以通过属性管理器“添加现有属性表”的方式快速引入WTL支持。通过以上两步你就完成了WTL 10.0与VS2019的深度集成。现在你既可以通过向导快速创建标准WTL项目也可以在任何现有C项目中通过包含atlapp.h等头文件来使用WTL。4. 创建与解析第一个WTL项目4.1 使用向导创建WTL应用程序让我们动手创建第一个项目来验证环境。在VS2019中通过“新建项目”对话框选择“WTL AppWizard”。点击下一步你会看到配置页面应用程序类型通常选择“标准桌面应用程序EXE”。其他选项如“DLL”用于创建动态库“静态库”用于创建静态库“基于对话框的应用程序”则创建一个以对话框为主窗口的程序。使用ATL通常保持默认已勾选。WTL在设计上与ATL有良好的协同勾选此选项会在项目中链接ATL库并提供一些ATL相关的工具类支持。对于纯WTL项目理论上可以不勾选但勾选能让环境更完整。支持COM如果你的应用需要COM组件支持可以勾选。对于简单的GUI程序可以不选。使用Unicode字符集强烈建议勾选。在现代Windows开发中UnicodeUTF-16是标准可以避免很多字符串相关的编码问题。点击“完成”向导会生成一个完整的、可编译运行的WTL应用程序框架。这个框架包含了一个主窗口类CMainFrame、一个视图类如果选择了文档视图结构、一个应用程序类CApp以及标准的WinMain入口点。4.2 项目结构与代码初探生成的项目结构非常清晰MainFrm.h/cpp主框架窗口的实现负责菜单、工具栏、状态栏和视图窗口的管理。View.h/cpp客户区视图窗口的实现你的主要绘图或控件逻辑可以放在这里。App.h/cpp应用程序类全局单例负责消息循环和初始化。资源文件包含图标、对话框、字符串表等。stdafx.h/cpp预编译头文件用于加速编译。你会发现里面已经包含了atlapp.h和atlframe.h等核心WTL头文件。编译并运行这个项目你会看到一个标准的Windows窗口带有菜单栏、工具栏和状态栏。这证明你的WTL开发环境已经完全就绪。让我们深入看一眼WinMain理解WTL的启动机制// 在 App.cpp 中 CAppModule _Module; // 全局应用程序模块对象 int WINAPI _tWinMain(...) { // 1. 初始化COM如果项目支持COM HRESULT hRes ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); ATLASSERT(SUCCEEDED(hRes)); // 2. 初始化应用程序模块这是ATL的部分WTL借用了它 hRes _Module.Init(NULL, hInstance); ATLASSERT(SUCCEEDED(hRes)); // 3. 创建并运行消息循环 CMessageLoop theLoop; _Module.AddMessageLoop(theLoop); // 4. 创建并显示主窗口 CMainFrame wndMain; if(wndMain.CreateEx() NULL) { ATLTRACE(_T(主窗口创建失败\n)); return 0; } wndMain.ShowWindow(nCmdShow); wndMain.UpdateWindow(); // 5. 进入消息循环 int nRet theLoop.Run(); // 6. 清理 _Module.RemoveMessageLoop(); _Module.Term(); ::CoUninitialize(); return nRet; }这段代码清晰地展示了WTL应用的启动、窗口创建、消息派发和清理的全过程。CMessageLoop是WTL消息循环的核心它比原始GetMessage/TranslateMessage/DispatchMessage更强大支持了CMessageFilter等扩展机制。5. WTL核心编程模型与实用技巧5.1 消息映射与事件处理WTL的消息处理机制是其优雅设计的重要体现。它采用了类似MFC但更简洁的宏系统。在窗口类如CMainFrame中你会看到这样的代码BEGIN_MSG_MAP(CMainFrame) MESSAGE_HANDLER(WM_CREATE, OnCreate) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit) COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar) CHAIN_MSG_MAP(CFrameWindowImplCMainFrame) // 将未处理的消息传递给父类 END_MSG_MAP()BEGIN_MSG_MAP/END_MSG_MAP()定义消息映射表的开始和结束。MESSAGE_HANDLER(消息, 处理函数)映射标准的Windows消息如WM_CREATE, WM_PAINT。COMMAND_ID_HANDLER(命令ID, 处理函数)映射菜单项、工具栏按钮的命令消息。CHAIN_MSG_MAP(基类)将当前类未处理的消息传递给指定的基类消息映射表。这是实现消息路由的关键。处理函数的签名通常是LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL /*bHandled*/)。注意bHandled参数如果你在函数中处理了该消息并希望阻止消息继续传递应将其设为TRUE如果设为FALSE消息会继续传递给CHAIN_MSG_MAP指定的基类或其他消息链。实操心得合理使用CHAIN_MSG_MAP可以构建清晰的消息处理层次。例如你的视图类可以将鼠标键盘消息传递给文档类处理而将绘制消息自己处理。避免在一个巨大的消息映射表中处理所有消息这不利于代码维护。5.2 对话框与控件编程WTL对对话框和标准Windows控件的封装非常轻量且高效。创建模态对话框非常简单class CMyDialog : public CDialogImplCMyDialog { public: enum { IDD IDD_MY_DIALOG }; // 对话框资源ID BEGIN_MSG_MAP(CMyDialog) MSG_WM_INITDIALOG(OnInitDialog) COMMAND_ID_HANDLER(IDOK, OnOK) COMMAND_ID_HANDLER(IDCANCEL, OnCancel) END_MSG_MAP() BOOL OnInitDialog(...) { /* 初始化控件 */ return TRUE; } LRESULT OnOK(...) { EndDialog(IDOK); return 0; } LRESULT OnCancel(...) { EndDialog(IDCANCEL); return 0; } }; // 使用对话框 CMyDialog dlg; if(dlg.DoModal() IDOK) { // 处理确定操作 }对于控件WTL提供了一系列以C开头的包装类如CButton,CEdit,CListBox等。它们通常通过DDX对话框数据交换宏或直接GetDlgItem来关联// 在对话框类中声明控件变量 CButton m_btnOK; CEdit m_editName; BOOL OnInitDialog(...) { // 关联控件 m_btnOK.Attach(GetDlgItem(IDOK)); m_editName.Attach(GetDlgItem(IDC_EDIT_NAME)); m_editName.SetWindowText(_T(默认文本)); return TRUE; }WTL的控件类方法非常直观基本与原生的SendMessage调用一一对应但提供了类型安全的接口。5.3 高级主题自定义绘制与双缓冲对于需要复杂图形界面的应用自定义绘制和防止闪烁是常见需求。WTL的CClientDC或CPaintDC用于获取设备上下文DC结合GDI或GDI进行绘制。双缓冲技术是解决绘制闪烁的经典方法。在WTL中实现的一个简单示例如下LRESULT CMyView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL /*bHandled*/) { CPaintDC dc(m_hWnd); // 获取绘制DC CRect rect; GetClientRect(rect); // 1. 创建内存DC和兼容位图 CDC memDC; memDC.CreateCompatibleDC(dc); CBitmap bitmap; bitmap.CreateCompatibleBitmap(dc, rect.Width(), rect.Height()); auto oldBitmap memDC.SelectBitmap(bitmap); // 2. 在内存DC上绘制背景、图形等 memDC.FillSolidRect(rect, RGB(255, 255, 255)); // 白色背景 // ... 你的复杂绘制逻辑全部在这里进行 ... DrawMyContent(memDC, rect); // 3. 将内存位图一次性拷贝到屏幕DC dc.BitBlt(0, 0, rect.Width(), rect.Height(), memDC, 0, 0, SRCCOPY); // 4. 清理资源SelectBitmap恢复旧位图对象析构函数会自动释放 memDC.SelectBitmap(oldBitmap); // memDC和bitmap对象离开作用域后会自动销毁 return 0; }这个模式将所有绘制操作在内存中完成最后只向屏幕执行一次BitBlt传输彻底消除了因多次直接绘制屏幕而导致的闪烁。6. 项目配置、调试与性能优化6.1 项目属性关键配置解析使用WTL向导创建的项目其属性配置大部分已经优化好了。但了解关键配置项有助于你解决一些疑难杂症或进行自定义优化。C/C - 常规 - SDL检查建议设为“否”/sdl-。SDL安全开发生命周期检查有时会对某些代码模式产生警告或错误对于成熟的WTL库代码关闭它可以减少干扰。C/C - 预处理器 - 预处理器定义你会看到类似_UNICODE;UNICODE;_WTL_USE_CSTRING;的定义。_UNICODE和UNICODE确保你使用Unicode字符集。_WTL_USE_CSTRING使用WTL自带的CString类轻量版而不是MFC的CString。如果你需要与MFC代码交互可能需要调整。_WIN32_WINNT这个宏定义了你的程序目标运行的Windows版本。WTL 10.0 for VS2019通常需要至少0x0A00Windows 10或更高以支持最新的API。你可以在stdafx.h中看到它的定义。确保它与你使用的Windows SDK版本匹配。链接器 - 系统 - 子系统应为“Windows (/SUBSYSTEM:WINDOWS)”。控制台程序则是CONSOLE。链接器 - 高级 - 入口点对于GUI程序通常是wWinMainCRTStartupUnicode或WinMainCRTStartup多字节。向导会自动设置。6.2 调试技巧与常见问题排查即使环境配置正确开发中仍会遇到各种问题。以下是一些常见场景的排查思路问题1编译错误“无法打开源文件 atlapp.h”排查这绝对是包含路径问题。首先检查项目属性VC目录 - 包含目录或你添加的全局属性表WTL_Global.props中的路径是否正确。路径中不要有尾随的反斜杠也不要使用中文。其次检查stdafx.h中#include atlapp.h的写法是否正确尖括号表示从系统或配置的包含目录中查找。问题2链接错误“无法解析的外部符号 _WinMain16”排查这通常表示你的项目配置是/SUBSYSTEM:CONSOLE控制台但实际代码入口是WinMainGUI。去链接器 - 系统 - 子系统中修改为“Windows”。反之如果你的程序是控制台程序但用了wWinMain也会报类似错误。问题3运行时窗口创建失败CreateEx返回NULL排查这是最令人头疼的问题之一。首先在CreateEx调用后立即使用GetLastError()获取错误代码并用FormatMessage转换成可读信息。常见原因有窗口类注册失败检查DECLARE_WND_CLASS宏或自定义的WNDCLASS结构体填写是否正确。资源ID错误检查对话框或菜单等资源ID是否正确定义且存在于.rc文件中。消息映射表未正确声明或定义确保BEGIN_MSG_MAP和END_MSG_MAP()配对正确且类声明中有DECLARE_MSG_MAP宏。问题4程序在调试时崩溃错误指向WTL或ATL内部代码排查启用更加严格的调试选项。在项目属性 - C/C - 常规 - 调试信息格式选择“程序数据库 (/Zi)”。在链接器 - 调试 - 生成调试信息选择“是 (/DEBUG)”。同时确保在“调试”配置下C/C - 代码生成 - 运行时库设置为“多线程调试DLL (/MDd)”。这能确保你链接到调试版的CRT更容易捕获内存错误。6.3 编译与运行时性能优化WTL项目本身非常轻量但以下优化可以进一步提升体验利用预编译头PCH向导生成的stdafx.h/cpp就是用于此目的。确保所有稳定的、不常变动的系统头文件如windows.h,atlbase.h,atlapp.h等都放在stdafx.h中。这样这些头文件只在第一次编译stdafx.cpp时被解析一次后续编译其他.cpp文件时会直接使用预编译的结果极大提升编译速度。选择合适的运行时库调试版本使用“多线程调试DLL (/MDd)”。便于调试但需要依赖MSVCRxxD.DLL。发布版本使用“多线程DLL (/MD)”。这是最常见的发布配置程序体积小但需要目标机器有对应的VC运行时可再发行组件包。如果你的程序需要静态链接可以选择“多线程 (/MT)”这样会将运行时库静态链接进EXE程序体积会变大但部署更简单无需单独安装运行库。链接时代码生成LTCG在发布版本配置中可以启用“链接器 - 优化 - 链接时代码生成”为“使用链接时代码生成 (/LTCG)”。这允许编译器在链接阶段进行跨模块的优化可能生成更高效的代码但会显著增加链接时间。对于大型项目可以考虑在最终发布构建时启用。减少二进制体积除了选择/MT静态链接会增加体积或/MD动态链接减少体积外还可以在发布配置中C/C - 优化 - 优化选择“使大小最小化 (/O1)”或“最大化速度 (/O2)”。链接器 - 调试 - 生成调试信息选择“否”。发布版本不需要调试信息。确保没有链接不必要的库。7. 从WTL项目到现代部署7.1 版本控制集成将你的WTL项目纳入Git等版本控制系统是现代开发的基本要求。需要忽略的文件和注意事项创建.gitignore文件一个针对Visual Studio C项目的典型.gitignore应该包含# 编译输出 [Bb]in/ [Oo]bj/ [Oo]ut/ x64/ x86/ [Dd]ebug/ [Rr]elease/ # VS用户文件和临时文件 *.user *.userosscache *.sln.docstates *.suo *.opensdf *.sdf *.db *.opendb *.VC.db # 预编译头输出 *.pch *.ipch # 其他 [Dd]ebugPublic/ [Rr]eleases/ [Pp]ackages/ *.aps *.ncb *.log *.tlog *.ilk *.meta提交核心资产确保提交.sln解决方案文件、.vcxproj项目文件、所有源代码文件.h,.cpp、资源文件.rc,.rc2, 资源图标等以及你自定义的属性表文件如WTL_Global.props。关于WTL库本身通常不建议将整个WTL库WTL10\Include提交到你的项目仓库中因为它是一个第三方库。更好的做法是方案A推荐使用Git子模块Submodule或包管理器如vcpkg来引用特定版本的WTL。这样库的版本可以被明确管理。方案B在项目的README或构建说明中明确告知协作者需要自行下载WTL 10.0并配置包含路径即我们之前做的全局属性表配置。7.2 安装包制作与依赖项处理当你完成开发需要将程序分发给用户时制作安装包是关键一步。你需要考虑依赖项收集VC 运行时如果你使用/MD或/MDd选项动态链接运行时目标用户电脑上必须安装对应版本的Microsoft Visual C Redistributable。你可以将运行库安装程序如vc_redist.x64.exe打包进你的安装包并在安装过程中静默运行它/install /quiet /norestart。其他DLL检查你的程序是否依赖了其他第三方DLL如数据库驱动、图像处理库等。使用像Dependencies原Dependency Walker这样的工具打开你的EXE文件可以查看其动态依赖。确保这些DLL随你的程序一起发布。安装包工具选择高级安装程序Advanced Installer、InstallShield功能强大商业软件常用但可能收费。WiX Toolset微软开源的一套XML驱动的安装包创作工具非常灵活强大但学习曲线较陡峭。Inno Setup免费、轻量、脚本驱动对于大多数桌面应用来说完全够用社区支持好。我个人在中小型项目中使用Inno Setup较多它的脚本语言Pascal-like易于上手。一个简单的Inno Setup脚本框架如下[Setup] AppName我的WTL应用 AppVersion1.0 DefaultDirName{pf}\我的WTL应用 DefaultGroupName我的WTL应用 OutputBaseFilenameMyWTLApp_Setup Compressionlzma2 SolidCompressionyes [Files] ; 主程序文件 Source: ..\Release\MyWTLApp.exe; DestDir: {app}; Flags: ignoreversion ; 依赖的DLL Source: ..\Redist\*.dll; DestDir: {app}; Flags: ignoreversion ; VC运行库安装程序可选让用户自行安装 ; Source: vc_redist.x64.exe; DestDir: {tmp}; Flags: deleteafterinstall [Icons] Name: {group}\我的WTL应用; Filename: {app}\MyWTLApp.exe Name: {commondesktop}\我的WTL应用; Filename: {app}\MyWTLApp.exe ;[Run] ; 静默安装VC运行库如果打包了 ; Filename: {tmp}\vc_redist.x64.exe; Parameters: /install /quiet /norestart; StatusMsg: 正在安装运行库...这个脚本定义了安装信息、要复制的文件以及创建的快捷方式。你可以根据需要添加注册表项、环境变量等更复杂的操作。从环境搭建、编码实践到调试优化最后完成部署这就是一个完整的WTL 10.0在VS2019下的开发生命周期。这套经典的组合在追求极致性能和可控性的Windows原生开发领域依然保持着强大的生命力。本文还有配套的精品资源点击获取
返回列表